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

Předěly Novytskyy a Rick Anderson

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

Vytvoření projektu konzoly Rozhraní API Google a ID klienta

  • Přidejte do aplikace balíček NuGet Microsoft.AspNetCore.Authentication.Google.
  • Postupujte podle pokynů v tématu Integrace google Sign-In do webové aplikace (dokumentace Google).
  • Na stránce Credentials (Přihlašovací údaje) konzoly Googlevyberte CREATE CREDENTIALS OAuth client ID (VYTVOŘIT PŘIHLAŠOVACÍ ÚDAJE ID klienta > OAuth).
  • V dialogovém okně Typ aplikace vyberte Webová aplikace. Zadejte Název aplikace.
  • V části Autorizované identifikátory URI 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 zástupný symbol je port {PORT} aplikace.
  • Vyberte tlačítko CREATE.
  • Uložte ID klienta a tajný klíč klienta pro použití v konfiguraci aplikace.
  • Při nasazování lokality:
    • Aktualizujte identifikátor URI přesměrování aplikace v konzole Google na nasazený identifikátor URI přesměrování aplikace.
    • V konzole Google Console vytvořte novou registraci rozhraní Google API pro produkční aplikaci s identifikátorem URI pro přesměrování produkce.

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

Ukládejte citlivá nastavení, jako je ID klienta Google a hodnoty tajných klíčů, pomocí Secret Manageru. Pro tuto ukázku použijte následující postup:

  1. Podle pokynů v tématu Povolení úložiště tajných klíče inicializejte projekt pro úložiště tajných klíčů.

  2. Ukládejte citlivá nastavení do místního úložiště tajných klíčů pomocí tajných klíčů a Authentication:Google:ClientId 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é prostředí na všech platformách. __, je dvojité podtržítko:

  • Podporováno všemi platformami. Například : oddělovač není podporován bash, ale __ je.
  • Automaticky nahrazeno :

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

Konfigurace ověřování Google

Přidejte službu Google 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"];
        });
}

Volání AddIdentity nakonfiguruje výchozí nastavení schématu. Přetížení AddAuthentication (String) nastaví vlastnost DefaultScheme . Přetížení AddAuthentication (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. Následná volání AddAuthentication přepsat dříve nakonfigurované vlastnosti AuthenticationOptions .

Metody rozšíření AuthenticationBuilder , které registrují obslužnou rutinu ověřování, se můžou volat jenom 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é jméno.

Přihlášení pomocí Googlu

  • Spusťte aplikaci a klikněte na Log in (Přihlásit se). Zobrazí se možnost přihlášení pomocí Googlu.
  • Klikněte na tlačítko Google, které se přesměruje na Google k ověření.
  • Po zadání přihlašovacích údajů Google budete přesměrováni zpět na web.

Dopředné informace o žádosti pomocí proxy serveru nebo nástroje pro vyrovnávání zatížení

Pokud je aplikace nasazená za proxy server nebo nástrojem pro vyrovnávání zatížení, můžou se některé původní informace žádosti přeslat do aplikace v hlavičkách žádostí. Tyto informace obvykle zahrnují schéma zabezpečeného požadavku ( https ), hostitele a IP adresu klienta. Aplikace nečtou tyto hlavičky požadavků automaticky ke zjištění a používání původních informací o požadavku.

Schéma se používá v generaci odkazů, které má vliv na tok ověřování s externími poskytovateli. Výsledkem ztráty zabezpečeného schématu ( https ) je, že aplikace generuje nesprávné adresy URL nezabezpečeného přesměrování.

Použijte middleware předaných hlaviček k zpřístupnění původních informací o požadavku aplikaci pro zpracování žádostí.

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

Zprostředkovatelé více ověřování

Když aplikace vyžaduje víc poskytovatelů, nařetězení rozšiřujících metod 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 GoogleOptions v referenčních informacích k rozhraní API. Můžete ji 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 URI /signin-google 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 ověřovacího middlewaru Google prostřednictvím zděděné RemoteAuthenticationOptions.CallbackPath vlastnosti třídy GoogleOptions .

Řešení potíží

  • Pokud přihlášení nefunguje a nezůstane vám žádné chyby, přepněte do vývojového režimu, aby se problém snadněji ladí.
  • Pokud není nakonfigurovaná voláním v , musí být při pokusu o ověření výsledků ve výjimce ArgumentException k dispozici možnost Identity services.AddIdentity ConfigureServices SignInScheme. Šablona projektu použitá v tomto kurzu zajistí, že to bude hotové.
  • Pokud se databáze lokality nevytyla pomocí počáteční migrace, zobrazí se při zpracování chyby požadavku 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 za chybou.

Další kroky

  • Tento článek vám ukázal, jak se můžete ověřit u Googlu. Podobným způsobem můžete provést ověření u jiných zprostředkovatelů uvedených na předchozí stránce.
  • Po publikování aplikace do Azure resetujte v ClientSecret konzole google API.
  • Nastavte Authentication:Google:ClientId Authentication:Google:ClientSecret a jako nastavení aplikace v Azure Portal. Systém konfigurace je nastavený tak, aby načítal klíče z proměnných prostředí.