Nastavení Google externí přihlášení v technologii ASP.NET CoreGoogle external login setup in ASP.NET Core

Podle Valeriy Novytskyy a Rick AndersonBy Valeriy Novytskyy and Rick Anderson

Starší verze Google + API se ukončily od 7. března 2019.Legacy Google+ APIs have been shut down as of March 7, 2019. Google + Signing a vývojáři musí přejít na nový systém přihlašování Google.Google+ sign in and developers must move to a new Google sign in system. Balíčky ASP.NET Core 2,1 a 2,2 pro ověřování Google se aktualizují, aby se vešly změny.The ASP.NET Core 2.1 and 2.2 packages for Google Authentication have be updated to accommodate the changes. Další informace a dočasné omezení pro ASP.NET Core najdete v tomto problému GitHubu.For more information and temporary mitigations for ASP.NET Core, see this GitHub issue. Tento kurz byl aktualizován pomocí nového procesu instalace.This tutorial has been updated with the new setup process.

V tomto kurzu se dozvíte, jak uživatelům povolit, aby se k účtu Google přihlásili pomocí projektu ASP.NET Core 2,2 vytvořeného na předchozí stránce.This tutorial shows you how to enable users to sign in with their Google account using the ASP.NET Core 2.2 project created on the previous page.

Vytvoření projektu konzoly rozhraní Google API a ID klientaCreate a Google API Console project and client ID

  • Přejděte k integraci přihlášení Google do vaší webové aplikace a vyberte Konfigurovat projekt.Navigate to Integrating Google Sign-In into your web app and select CONFIGURE A PROJECT.
  • V dialogovém okně Konfigurace klienta OAuth vyberte možnost webový server.In the Configure your OAuth client dialog, select Web server.
  • Do textového pole autorizovaných identifikátorů URI pro přesměrování nastavte identifikátor URI přesměrování.In the Authorized redirect URIs text entry box, set the redirect URI. Třeba https://localhost:5001/signin-google.For example, https://localhost:5001/signin-google
  • Uložte ID klienta a tajný klíč klienta.Save the Client ID and Client Secret.
  • Při nasazování lokality Zaregistrujte novou veřejnou adresu URL z konzoly Google.When deploying the site, register the new public url from the Google Console.

Store Google ClientID a ClientSecretStore Google ClientID and ClientSecret

Uložte citlivá nastavení, jako je Client ID Google Client Secret a pomocí správce tajných klíčů.Store sensitive settings such as the Google Client ID and Client Secret with the Secret Manager. Pro účely tohoto kurzu pojmenujte tokeny Authentication:Google:ClientId a: Authentication:Google:ClientSecretFor the purposes of this tutorial, name the tokens Authentication:Google:ClientId and Authentication:Google:ClientSecret:

dotnet user-secrets set "Authentication:Google:ClientId" "X.apps.googleusercontent.com"
dotnet user-secrets set "Authentication:Google:ClientSecret" "<client secret>"

Když pracujete s hierarchickými klíči v proměnných prostředí, oddělovač dvojtečky (:) nemusí fungovat na všech platformách (například bash).When working with hierarchical keys in environment variables, a colon separator (:) may not work on all platforms (for example, Bash). Dvojité podtržítko (__) je podporováno všemi platformami a je automaticky nahrazeno dvojtečkou.A double underscore (__) is supported by all platforms and is automatically replaced by a colon.

Přihlašovací údaje a využití rozhraní API můžete spravovat v konzole API.You can manage your API credentials and usage in the API Console.

Konfigurace ověřování GoogleConfigure Google authentication

Přidat službu Google do Startup.ConfigureServices:Add the Google service to Startup.ConfigureServices:

public void ConfigureServices(IServiceCollection services)
{
    services.AddDbContext<ApplicationDbContext>(options =>
        options.UseSqlServer(
            Configuration.GetConnectionString("DefaultConnection")));
    services.AddDefaultIdentity<IdentityUser>()
        .AddDefaultUI(UIFramework.Bootstrap4)
        .AddEntityFrameworkStores<ApplicationDbContext>();

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

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

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}

Volání AddIdentity nakonfiguruje výchozí nastavení schéma.The call to AddIdentity configures the default scheme settings. AddAuthentication(String) přetížení sad DefaultScheme vlastnost.The AddAuthentication(String) overload sets the DefaultScheme property. AddAuthentication (akce<AuthenticationOptions>) přetížení umožňuje konfigurovat možnosti ověřování, které je možné použít k nastavení výchozí schémata ověřování pro různé účely.The AddAuthentication(Action<AuthenticationOptions>) overload allows configuring authentication options, which can be used to set up default authentication schemes for different purposes. Následující volání AddAuthentication přepsání, které jste dříve nakonfigurovali AuthenticationOptions vlastnosti.Subsequent calls to AddAuthentication override previously configured AuthenticationOptions properties.

AuthenticationBuilder rozšiřující metody, které se zaregistrovat obslužnou rutinu ověřování může být volána pouze jednou za schéma ověřování.AuthenticationBuilder extension methods that register an authentication handler may only be called once per authentication scheme. Existují přetížení, které umožňují konfiguraci vlastností schéma, název schématu a zobrazovaný název.Overloads exist that allow configuring the scheme properties, scheme name, and display name.

Přihlásit se přes GoogleSign in with Google

  • Spusťte aplikaci a klikněte na Přihlásit se.Run the app and click Log in. Zobrazí se možnost přihlásit se přes Google.An option to sign in with Google appears.
  • Klikněte na tlačítko Google , které přesměruje na Google pro ověřování.Click the Google button, which redirects to Google for authentication.
  • Po zadání přihlašovacích údajů Google budete přesměrováni zpátky na web.After entering your Google credentials, you are redirected back to the web site.

Vpřed žádost o informace o proxy serveru nebo nástroj pro vyrovnávání zatíženíForward request information with a proxy or load balancer

Pokud je aplikace nasazena za proxy server nebo nástroje pro vyrovnávání zatížení, některé z původní informace o požadavku může být přeposílán aplikace v záhlaví požadavku.If the app is deployed behind a proxy server or load balancer, some of the original request information might be forwarded to the app in request headers. Tyto informace obvykle obsahuje schéma požadavku zabezpečení (https), hostitele a IP adresu klienta.This information usually includes the secure request scheme (https), host, and client IP address. Aplikace si automaticky tyto hlavičky žádosti mohli objevit a používat původní informace o žádostech.Apps don't automatically read these request headers to discover and use the original request information.

Schéma se používá při generování odkazů, které má vliv na tok ověřování u externích poskytovatelů.The scheme is used in link generation that affects the authentication flow with external providers. Zabezpečený režim ztráty (https) výsledkem generování adresy URL pro přesměrování nesprávné nezabezpečené aplikace.Losing the secure scheme (https) results in the app generating incorrect insecure redirect URLs.

Předané Middleware záhlaví využívat k zpřístupňování původní informace o požadavku do aplikace pro zpracování požadavku.Use Forwarded Headers Middleware to make the original request information available to the app for request processing.

Další informace naleznete v tématu Konfigurace ASP.NET Core pro práci se servery proxy a nástroji pro vyrovnávání zatížení.For more information, see Konfigurace ASP.NET Core pro práci se servery proxy a nástroji pro vyrovnávání zatížení.

Více poskytovatelů ověřováníMultiple authentication providers

Pokud aplikace vyžaduje několik zprostředkovatelů, zřetězení rozšiřující metody zprostředkovatele za AddAuthentication:When the app requires multiple providers, chain the provider extension methods behind AddAuthentication:

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

Další informace o možnostech konfigurace, které podporuje ověřování Google, najdete v referenčních informacích k rozhraníAPI.GoogleOptionsSee the GoogleOptions API reference for more information on configuration options supported by Google authentication. To umožňuje požádat o jiné informace o uživateli.This can be used to request different information about the user.

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

Segment identifikátoru URI /signin-google je nastaven jako výchozí zpětného volání zprostředkovatele ověřování Google.The URI segment /signin-google is set as the default callback of the Google authentication provider. Můžete změnit výchozí identifikátor URI zpětného volání při konfiguraci middleware ověřování Google přes zděděnou RemoteAuthenticationOptions.CallbackPath vlastnost GoogleOptions třídy.You can change the default callback URI while configuring the Google authentication middleware via the inherited RemoteAuthenticationOptions.CallbackPath property of the GoogleOptions class.

Poradce při potížíchTroubleshooting

  • Pokud přihlášení nefunguje a nezískáváte žádné chyby, přepněte do vývojového režimu, aby se tento problém zjednodušil při ladění.If the sign-in doesn't work and you aren't getting any errors, switch to development mode to make the issue easier to debug.
  • Pokud není identita nakonfigurovaná services.AddIdentity voláním ConfigureServicesv, zkuste ověřit výsledky v ArgumentException: Je nutné zadatmožnost SignInScheme.If Identity isn't configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate results in ArgumentException: The 'SignInScheme' option must be provided. Šablona projektu použité v tomto kurzu zajistí, že to se provádí.The project template used in this tutorial ensures that this is done.
  • Pokud nebyl vytvořen použití počáteční migraci databáze lokality, můžete získat databázová operace selhala při zpracování požadavku chyby.If the site database has not been created by applying the initial migration, you get A database operation failed while processing the request error. Vyberte možnost použít migrace k vytvoření databáze a aktualizujte stránku, aby bylo možné pokračovat v minulosti.Select Apply Migrations to create the database, and refresh the page to continue past the error.

Další postupNext steps

  • V tomto článku jsme si ukázali, jak můžete ověřit s Google.This article showed how you can authenticate with Google. Můžete postupovat podle podobný přístup k ověření u jiných poskytovatelů na předchozí stránce.You can follow a similar approach to authenticate with other providers listed on the previous page.
  • Jakmile aplikaci publikujete do Azure, resetujte ji ClientSecret v konzole rozhraní Google API.Once you publish the app to Azure, reset the ClientSecret in the Google API Console.
  • Nastavte Authentication:Google:ClientId a Authentication:Google:ClientSecret jako nastavení aplikace na webu Azure Portal.Set the Authentication:Google:ClientId and Authentication:Google:ClientSecret as application settings in the Azure portal. Konfigurační systém je nastavený na klíče pro čtení z proměnných prostředí.The configuration system is set up to read keys from environment variables.