Nastavení externího přihlášení Google v ASP.NET Core

Autoři: Valerij Novytskyj a Rick Anderson

V tomto kurzu se dozvíte, jak uživatelům umožnit přihlášení pomocí účtu Google pomocí projektu ASP.NET Core vytvořeného na předchozí stránce.

Vytvoření ID klienta a tajného klíče Google OAuth 2.0

  • Postupujte podle pokynů v integraci přihlášení Google do webové aplikace (dokumentace Google).

  • Přejděte na Google API &Services.

  • Nejprve musí existovat projekt, možná ho budete muset vytvořit. Po výběru projektu zadejte řídicí panel.

  • Na obrazovce souhlasu Oauth řídicího panelu:

    • Vyberte typ uživatele – externí a CREATE.
    • V dialogovém okně Informace o aplikaci zadejte název aplikace, e-mail podpory uživatelů a kontaktní údaje pro vývojáře.
    • Krokujte krokem Obory .
    • Projděte si krok testovacích uživatelů .
    • Zkontrolujte obrazovku souhlasu OAuth a vraťte se na řídicí panel aplikace.
  • Na kartě Přihlašovací údaje na řídicím panelu aplikace vyberte ID klienta CREATE CREDENTIALS>OAuth.

  • Vyberte Typ aplikace>Webová aplikace, zvolte název.

  • V části Identifikátory URI pro autorizované přesměrování vyberte ADD URI a nastavte identifikátor URI přesměrování. Příklad identifikátoru URI přesměrování: https://localhost:{PORT}/signin-google, kde {PORT} zástupný symbol je port aplikace.

  • Vyberte tlačítko VYTVOŘIT.

  • Uložte ID klienta a tajný klíč klienta pro použití v konfiguraci aplikace.

  • Při nasazování webu:

    • Aktualizujte identifikátor URI přesměrování aplikace v konzole Google na nasazený identifikátor URI přesměrování aplikace.
    • Vytvořte novou registraci rozhraní Google API v konzole Google Console pro produkční aplikaci s identifikátorem URI přesměrování produkčního prostředí.

Uložení ID klienta Google a tajného klíče

Uložte citlivá nastavení, jako je ID klienta Google a hodnoty tajných kódů, pomocí Správce tajných kódů. Pro tuto ukázku použijte následující kroky:

  1. Inicializuje projekt pro úložiště tajných kódů podle pokynů v části Povolit úložiště tajných kódů.

  2. Uložte citlivá nastavení v místním úložišti tajných kódů pomocí tajných klíčů Authentication:Google:ClientId a Authentication:Google:ClientSecret:

    dotnet user-secrets set "Authentication:Google:ClientId" "<client-id>"
    dotnet user-secrets set "Authentication:Google:ClientSecret" "<client-secret>"
    

Oddělovač : nefunguje s hierarchickými klíči proměnných prostředí na všech platformách. Dvojité podtržítko (__) se:

  • Podporuje všemi platformami. Například Bash nepodporuje oddělovač :, ale oddělovač __ ano.
  • Automaticky nahrazeno dvojtečkou (:).

Přihlašovací údaje a využití rozhraní API můžete spravovat v konzole API.

Konfigurace ověřování Google

Přidejte do Microsoft.AspNetCore.Authentication.Google aplikace balíček NuGet.

Přidejte ověřovací službu do Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>(options =>
        options.SignIn.RequireConfirmedAccount = true)
            .AddEntityFrameworkStores<ApplicationDbContext>();
    services.AddRazorPages();

    services.AddAuthentication()
        .AddGoogle(options =>
        {
            IConfigurationSection googleAuthNSection =
                Configuration.GetSection("Authentication:Google");

            options.ClientId = googleAuthNSection["ClientId"];
            options.ClientSecret = googleAuthNSection["ClientSecret"];
        });
}

Přidejte ověřovací službu do Program:

var builder = WebApplication.CreateBuilder(args);
var services = builder.Services;
var configuration = builder.Configuration;

services.AddAuthentication().AddGoogle(googleOptions =>
    {
        googleOptions.ClientId = configuration["Authentication:Google:ClientId"];
        googleOptions.ClientSecret = configuration["Authentication:Google:ClientSecret"];
    });

Volání konfiguruje AddIdentity výchozí nastavení schématu. Přetížení AddAuthentication(IServiceCollection, String) nastaví DefaultScheme vlastnost. Přetížení AddAuthentication(IServiceCollection, Action<AuthenticationOptions>) umožňuje konfigurovat možnosti ověřování, které lze použít k nastavení výchozích schémat ověřování pro různé účely. Další volání k AddAuthentication přepsání dříve nakonfigurovaných AuthenticationOptions vlastností

AuthenticationBuilder metody rozšíření, které registrují obslužnou rutinu ověřování, mohou být volána pouze jednou pro každé schéma ověřování. Existují přetížení, která umožňují konfigurovat vlastnosti schématu, název schématu a zobrazovaný název.

Přihlášení pomocí Googlu

  • Spusťte aplikaci a vyberte Přihlásit se. Zobrazí se možnost přihlášení pomocí Googlu.
  • Vyberte tlačítko Google, které se přesměruje na Google pro ověření.
  • Po zadání přihlašovacích údajů Google se přesměrujete zpět na web.

Předávání informací o požadavcích pomocí proxy serveru nebo nástroje pro vyrovnávání zatížení

Pokud je aplikace nasazená za proxy serverem nebo nástrojem pro vyrovnávání zatížení, mohou se některé z původních informací o požadavku předávat do aplikace v hlavičce požadavku. Tyto informace obvykle zahrnují zabezpečené schéma požadavků (https), hostitele a IP adresu klienta. Aplikace tyto hlavičky požadavků nenačítají automaticky, aby zjistily a využily informace o původním požadavku.

Schéma se používá při generování odkazů, které ovlivňuje tok ověřování s externími zprostředkovateli. Ztráta zabezpečeného schématu (https) způsobí, že aplikace generuje nesprávné a nezabezpečené adresy URL pro přesměrování.

Pomocí middlewaru Forwarded Headers zpřístupníte aplikaci informace o původním požadavku pro zpracování požadavků.

Další informace najdete v tématu Konfigurace ASP.NET Core pro práci s proxy servery a nástroji pro vyrovnávání zatížení.

Několik zprostředkovatelů ověřování

Pokud aplikace vyžaduje více poskytovatelů, zřetězte metody rozšíření poskytovatele za AddAuthentication:

services.AddAuthentication()
    .AddMicrosoftAccount(microsoftOptions => { ... })
    .AddGoogle(googleOptions => { ... })
    .AddTwitter(twitterOptions => { ... })
    .AddFacebook(facebookOptions => { ... });

Další informace o možnostech konfigurace podporovaných ověřováním Google najdete v referenčních informacích k GoogleOptions rozhraní API . Můžete ho použít k vyžádání různých informací o uživateli.

Změna výchozího identifikátoru URI zpětného volání

Segment /signin-google identifikátoru URI je nastavený jako výchozí zpětné volání zprostředkovatele ověřování Google. Výchozí identifikátor URI zpětného volání můžete změnit při konfiguraci middlewaru ověřování Google prostřednictvím zděděné RemoteAuthenticationOptions.CallbackPath vlastnosti GoogleOptions třídy.

Řešení problému

  • Pokud přihlášení nefunguje a vy se nezobrazují žádné chyby, přepněte do vývojového režimu, aby se problém snadněji ladil.
  • Pokud Identity není nakonfigurován voláním services.AddIdentityConfigureServices, pokus o ověření výsledků v ArgumentException: Musí být k dispozici možnost SignInScheme. Šablona projektu použitá v tomto kurzu zajišťuje Identity konfiguraci.
  • Pokud se databáze lokality nevytvořila použitím počáteční migrace, při zpracování chyby požadavku se zobrazí operace databáze, která selhala. Výběrem možnosti Použít migrace vytvořte databázi a aktualizujte stránku, abyste mohli pokračovat po chybě.
  • Chyba HTTP 500 po úspěšném ověření požadavku poskytovatelem OAuth 2.0, jako je Google: Podívejte se na tento problém Na GitHubu.
  • Postup implementace externího ověřování s Googlem pro React a dalšími aplikacemi SPA: Podívejte se na tento problém na GitHubu.

Další kroky

  • Tento článek vám ukázal, jak se můžete ověřit pomocí Googlu. Podobný přístup můžete použít k ověření u jiných poskytovatelů uvedených na předchozí stránce.
  • Po publikování aplikace do Azure resetujte konzolu ClientSecret Google API Console.
  • Na webu Azure Portal nastavte Authentication:Google:ClientId a Authentication:Google:ClientSecret jako nastavení aplikace. Konfigurační systém je nastavený tak, aby načítal klíče z proměnných prostředí.