Configuration de la connexion externe à un compte Microsoft avec ASP.NET CoreMicrosoft Account external login setup with ASP.NET Core

Par Valeriy Novytskyy et Rick AndersonBy Valeriy Novytskyy and Rick Anderson

Cet exemple montre comment permettre aux utilisateurs de se connecter avec leur compte Microsoft à l’aide du projet ASP.NET Core 2,2 créé sur la page précédente.This sample shows you how to enable users to sign in with their Microsoft account using the ASP.NET Core 2.2 project created on the previous page.

Créer l’application dans le portail des développeurs MicrosoftCreate the app in Microsoft Developer Portal

Si vous n’avez pas de compte Microsoft, sélectionnez en créer un.If you don't have a Microsoft account, select Create one. Après vous être connecté, vous êtes redirigé vers la page inscriptions d’applications :After signing in you are redirected to the App registrations page:

  • Sélectionner une nouvelle inscriptionSelect New registration
  • Entrez un nom.Enter a Name.
  • Sélectionnez une option pour les types de comptes pris en charge.Select an option for Supported account types.
  • Sous URI de redirection, entrez votre URL de /signin-microsoft développement avec le suffixe.Under Redirect URI, enter your development URL with /signin-microsoft appended. Par exemple, https://localhost:44389/signin-microsoft.For example, https://localhost:44389/signin-microsoft. Le schéma d’authentification Microsoft configuré plus tard dans cet exemple gère automatiquement les /signin-microsoft demandes à l’itinéraire pour implémenter le Flow OAuth.The Microsoft authentication scheme configured later in this sample will automatically handle requests at /signin-microsoft route to implement the OAuth flow.
  • Sélectionner un RegistreSelect Register

Créer une clé secrète clientCreate client secret

  • Dans le volet gauche, sélectionnez certificats & secrets.In the left pane, select Certificates & secrets.

  • Sous secrets client, sélectionnez nouvelle clé secrète client .Under Client secrets, select New client secret

    • Ajoutez une description pour la clé secrète client.Add a description for the client secret.
    • Sélectionnez le bouton Ajouter .Select the Add button.
  • Sous secrets clients, copiez la valeur de la clé secrète client.Under Client secrets, copy the value of the client secret.

Notes

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

Stocker l’ID client et la clé secrète client MicrosoftStore the Microsoft client ID and client secret

Exécutez les commandes suivantes pour stocker ClientId et ClientSecret utiliser le Gestionnaire de secreten toute sécurité :Run the following commands to securely store ClientId and ClientSecret using Secret Manager:

dotnet user-secrets set Authentication:Microsoft:ClientId <Client-Id>
dotnet user-secrets set Authentication:Microsoft:ClientSecret <Client-Secret>

Liez des paramètres sensibles tels ClientId que ClientSecret Microsoft et à la configuration de votre application à l’aide du Gestionnaire de secret.Link sensitive settings like Microsoft ClientId and ClientSecret to your application configuration using the Secret Manager. Pour les besoins de cet exemple, nommez les jetons Authentication:Microsoft:ClientId et Authentication:Microsoft:ClientSecret.For the purposes of this sample, name the tokens Authentication:Microsoft:ClientId and Authentication:Microsoft:ClientSecret.

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.

Configurer l’authentification de compte MicrosoftConfigure Microsoft Account Authentication

Ajoutez le service de compte Microsoft Startup.ConfigureServicesà :Add the Microsoft Account service to Startup.ConfigureServices:

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

    services.AddAuthentication().AddMicrosoftAccount(microsoftOptions =>
    {
        microsoftOptions.ClientId = Configuration["Authentication:Microsoft:ClientId"];
        microsoftOptions.ClientSecret = Configuration["Authentication:Microsoft:ClientSecret"];
    });

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

L’appel à AddDefaultIdentity configure les paramètres de schéma par défaut.The call to AddDefaultIdentity 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.

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 => { ... });

Pour plus d’informations sur les options de configuration prises en charge par l’authentification de compte Microsoft, consultez la référence de l’API MicrosoftAccountOptions .See the MicrosoftAccountOptions API reference for more information on configuration options supported by Microsoft Account authentication. Cela peut être utilisé pour demander différentes informations sur l’utilisateur.This can be used to request different information about the user.

Compte Se connecter avec MicrosoftSign in with Microsoft Account

Exécutez le, puis cliquez sur se connecter.Run the and click Log in. Une option permettant de se connecter à Microsoft s’affiche.An option to sign in with Microsoft appears. Lorsque vous cliquez sur Microsoft, vous êtes redirigé vers Microsoft pour l’authentification.When you click on Microsoft, you are redirected to Microsoft for authentication. Après vous être connecté avec votre compte Microsoft (s’il n’est pas déjà connecté), vous êtes invité à autoriser l’application à accéder à vos informations :After signing in with your Microsoft Account (if not already signed in) you will be prompted to let the app access your info:

Appuyez sur Oui . vous êtes alors redirigé vers le site Web où vous pouvez définir votre adresse de messagerie.Tap Yes and you will be redirected back to the web site where you can set your email.

Vous êtes maintenant connecté à l’aide de vos informations d’identification Microsoft :You are now logged in using your Microsoft credentials:

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.

Résolution des problèmesTroubleshooting

  • Si le fournisseur de comptes Microsoft vous redirige vers une page d’erreur de connexion, notez le titre d’erreur et la description paramètres de chaîne # de requête qui suivent directement le (mot-dièse) dans l’URI.If the Microsoft Account provider redirects you to a sign in error page, note the error title and description query string parameters directly following the # (hashtag) in the Uri.

    Bien que le message d’erreur semble indiquer un problème avec l’authentification Microsoft, la cause la plus courante est que l’URI de votre application ne correspond à aucun des URI de redirection spécifiés pour la plateforme Web .Although the error message seems to indicate a problem with Microsoft authentication, the most common cause is your application Uri not matching any of the Redirect URIs specified for the Web platform.

  • Si l’identité n’est pas services.AddIdentity configurée en appelant dans ConfigureServices, toute tentative d’authentification entraînera l’exception ArgumentException : L’option « SignInScheme » doit être fournie.If Identity isn't configured by calling services.AddIdentity in ConfigureServices, attempting to authenticate will result in ArgumentException: The 'SignInScheme' option must be provided. Le modèle de projet utilisé dans cet exemple permet de s’assurer que cette opération est effectuée.The project template used in this sample ensures that this is done.

  • Si la base de données de site n’a pas été créé en appliquant la migration initiale, vous obtiendrez 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 will get A database operation failed while processing the request error. Appuyez sur appliquer les Migrations pour créer la base de données et actualiser pour passer à l’erreur.Tap Apply Migrations to create the database and refresh to continue past the error.

Étapes suivantesNext steps

  • Cet article vous a montré comment vous pouvez vous authentifier auprès de Microsoft.This article showed how you can authenticate with Microsoft. 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 votre site Web dans l’application Web Azure, créez un nouveau secret client dans le portail des développeurs Microsoft.Once you publish your web site to Azure web app, create a new client secrets in the Microsoft Developer Portal.

  • Définir le Authentication:Microsoft:ClientId et Authentication:Microsoft:ClientSecret en tant que paramètres d’application dans le portail Azure.Set the Authentication:Microsoft:ClientId and Authentication:Microsoft: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.