Programme d’installation de la connexion externe Google dans ASP.NET CoreGoogle external login setup in ASP.NET Core

Par Valeriy Novytskyy et Rick AndersonBy Valeriy Novytskyy and Rick Anderson

Les API Google + héritées ont été arrêtées à compter du 7 mars 2019.Legacy Google+ APIs have been shut down as of March 7, 2019. Google + se connecter et les développeurs doivent déplacer vers une nouvelle connexion de Google dans le système.Google+ sign in and developers must move to a new Google sign in system. Les packages ASP.NET Core 2.1 et 2.2 pour l’authentification Google ont mis à jour pour prendre en compte les modifications.The ASP.NET Core 2.1 and 2.2 packages for Google Authentication have be updated to accommodate the changes. Pour plus d’informations et d’atténuation temporaire pour ASP.NET Core, consultez ce problème GitHub.For more information and temporary mitigations for ASP.NET Core, see this GitHub issue. Ce didacticiel a été mis à jour avec le nouveau processus d’installation.This tutorial has been updated with the new setup process.

Ce didacticiel vous montre comment permettre aux utilisateurs de se connecter avec leur compte Google à l’aide du projet ASP.NET Core 2.2 créé sur le page précédente.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.

Créer un ID de client et de projet de Console d’API GoogleCreate a Google API Console project and client ID

  • Accédez à l’intégration de Google Sign-In dans votre application web et sélectionnez configurer un projet.Navigate to Integrating Google Sign-In into your web app and select CONFIGURE A PROJECT.
  • Dans le configurer votre client OAuth boîte de dialogue, sélectionnez serveur Web.In the Configure your OAuth client dialog, select Web server.
  • Dans le URI de redirection autorisée zone de texte, définissez l’URI de redirection.In the Authorized redirect URIs text entry box, set the redirect URI. Par exemple, https://localhost:5001/signin-google.For example, https://localhost:5001/signin-google
  • Enregistrer le ID Client et clé secrète Client.Save the Client ID and Client Secret.
  • Lorsque vous déployez le site, inscrire la nouvelle url publique à partir de la Google Console.When deploying the site, register the new public url from the Google Console.

Store Google ClientID et ClientSecretStore Google ClientID and ClientSecret

Store paramètres sensibles tels que Google Client ID et Client Secret avec la Secret Manager.Store sensitive settings such as the Google Client ID and Client Secret with the Secret Manager. Dans le cadre de ce didacticiel, nommez les jetons Authentication:Google:ClientId et Authentication:Google:ClientSecret:For 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>"

Quand vous utilisez des clés hiérarchiques dans des variables d’environnement, le séparateur deux-points (:) risque de ne pas fonctionner sur toutes les plateformes (par exemple, Bash).When working with hierarchical keys in environment variables, a colon separator (:) may not work on all platforms (for example, Bash). Un trait de soulignement double (__) est pris en charge par toutes les plateformes et automatiquement remplacé par un signe deux-points.A double underscore (__) is supported by all platforms and is automatically replaced by a colon.

Vous pouvez gérer vos informations d’identification de l’API et l’utilisation dans le Console d’API.You can manage your API credentials and usage in the API Console.

Configurer l’authentification GoogleConfigure Google authentication

Ajouter le service Google 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);
}

L’appel à AddIdentity configure les paramètres de schéma par défaut.The call to AddIdentity configures the default scheme settings. Le AddAuthentication(String) surcharger définit le DefaultScheme propriété.The AddAuthentication(String) overload sets the DefaultScheme property. Le AddAuthentication (Action<AuthenticationOptions>) surcharge permet de configurer les options d’authentification, qui peuvent être utilisées pour définir des schémas d’authentification par défaut à des fins différentes.The AddAuthentication(Action<AuthenticationOptions>) overload allows configuring authentication options, which can be used to set up default authentication schemes for different purposes. Les appels suivants à AddAuthentication remplacement configuré précédemment AuthenticationOptions propriétés.Subsequent calls to AddAuthentication override previously configured AuthenticationOptions properties.

AuthenticationBuilder les méthodes d’extension qui inscrivent un gestionnaire d’authentification peuvent être appelées uniquement une fois par le schéma d’authentification.AuthenticationBuilder extension methods that register an authentication handler may only be called once per authentication scheme. Il existe des surcharges qui permettent de configurer les propriétés de schéma, le nom du schéma d’et le nom complet.Overloads exist that allow configuring the scheme properties, scheme name, and display name.

Se connecter avec GoogleSign in with Google

  • Exécutez l’application et cliquez sur connectez-vous.Run the app and click Log in. Une option pour vous connecter avec Google s’affiche.An option to sign in with Google appears.
  • Cliquez sur le Google bouton, qui redirige vers Google pour l’authentification.Click the Google button, which redirects to Google for authentication.
  • Après avoir entré vos informations d’identification Google, vous êtes redirigé vers le site web.After entering your Google credentials, you are redirected back to the web site.

Transférer les informations sur la demande avec un proxy ou un équilibreur de chargeForward request information with a proxy or load balancer

Si l’application est déployée derrière un serveur proxy ou un équilibreur de charge, certaines informations sur la demande d’origine peuvent être transférées vers l’application dans les en-têtes de demande.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. Ces informations incluent généralement le schéma de demande sécurisé (https), l’hôte et l’adresse IP du client.This information usually includes the secure request scheme (https), host, and client IP address. Les applications ne lisent pas automatiquement ces en-têtes de demande pour découvrir et d’utiliser les informations sur la demande d’origine.Apps don't automatically read these request headers to discover and use the original request information.

Le schéma est utilisé dans la génération de lien qui affecte le flux d’authentification dans le cas de fournisseurs externes.The scheme is used in link generation that affects the authentication flow with external providers. En cas de perte du schéma sécurisé (https), l’application génère des URL de redirection incorrectes et non sécurisées.Losing the secure scheme (https) results in the app generating incorrect insecure redirect URLs.

Utilisez l’intergiciel Forwarded Headers afin de mettre les informations de demande d’origine à la disposition de l’application pour le traitement des demandes.Use Forwarded Headers Middleware to make the original request information available to the app for request processing.

Pour plus d’informations, consultez Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge.For more information, see Configurer ASP.NET Core pour l’utilisation de serveurs proxy et d’équilibreurs de charge.

Fournisseurs d’authentification multipleMultiple authentication providers

Lorsque l’application nécessite plusieurs fournisseurs, chaînez les méthodes d’extension de fournisseur derrière AddAuthentication :When the app requires multiple providers, chain the provider extension methods behind AddAuthentication:

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

Consultez le GoogleOptions référence des API pour plus d’informations sur les options de configuration prises en charge par l’authentification Google.See the GoogleOptions API reference for more information on configuration options supported by Google authentication. Cela peut être utilisé pour demander différentes informations sur l’utilisateur.This can be used to request different information about the user.

Modifier l’URI de rappel par défautChange the default callback URI

Le segment d’URI /signin-google est défini en tant que le rappel par défaut du fournisseur d’authentification Google.The URI segment /signin-google is set as the default callback of the Google authentication provider. Vous pouvez modifier l’URI de rappel par défaut lors de la configuration de l’intergiciel d’authentification Google via héritées RemoteAuthenticationOptions.CallbackPath propriété de la GoogleOptions classe.You can change the default callback URI while configuring the Google authentication middleware via the inherited RemoteAuthenticationOptions.CallbackPath property of the GoogleOptions class.

Résolution des problèmesTroubleshooting

  • Si l’authentification dans ne fonctionne pas et vous ne recevez pas les erreurs, basculer en mode de développement pour rendre le problème plus facile à déboguer.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.
  • Si l’identité n’est pas configurée en appelant services.AddIdentity dans ConfigureServices, la tentative d’authentifier les résultats dans ArgumentException : L’option 'SignInScheme' doit être fournie.If Identity isn't configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate results in ArgumentException: The 'SignInScheme' option must be provided. Le modèle de projet utilisé dans ce didacticiel permet de s’assurer que cela est fait.The project template used in this tutorial ensures that this is done.
  • Si la base de données de site n’a pas été créé en appliquant la migration initiale, vous obtenez une opération de base de données a échoué lors du traitement de la demande erreur.If the site database has not been created by applying the initial migration, you get A database operation failed while processing the request error. Sélectionnez appliquer les Migrations pour créer la base de données et actualisez la page pour passer à l’erreur.Select Apply Migrations to create the database, and refresh the page to continue past the error.

Étapes suivantesNext steps

  • Cet article vous a montré comment vous pouvez vous authentifier avec Google.This article showed how you can authenticate with Google. Vous pouvez suivre une approche similaire pour s’authentifier auprès d’autres fournisseurs répertoriés sur le page précédente.You can follow a similar approach to authenticate with other providers listed on the previous page.
  • Une fois que vous publiez l’application sur Azure, réinitialiser le ClientSecret dans la Console d’API Google.Once you publish the app to Azure, reset the ClientSecret in the Google API Console.
  • Définir le Authentication:Google:ClientId et Authentication:Google:ClientSecret en tant que paramètres d’application dans le portail Azure.Set the Authentication:Google:ClientId and Authentication:Google:ClientSecret as application settings in the Azure portal. Le système de configuration est conçu pour lire les clés à partir de variables d’environnement.The configuration system is set up to read keys from environment variables.