par , 05/07/2019 � 16h26 (8037 Affichages)
IdentityServer est une solution open source .NET de gestion d�identit� et de contr�le d�acc�s. Il repose sur les protocoles OpenID Connect et OAuth 2.0.
IdentityServer peut �tre utilis� par les entreprises pour mettre en place une solution pour :
- la protection de leurs ressources ;
- l�authentification des utilisateurs via une base de donn�es ou des fournisseurs externes d�identit� (Microsoft, Google, Facebook, etc.) ;
- la gestion des sessions et la f�d�ration (single sign-on) ;
- la g�n�ration des jetons pour les clients ;
- la validation des jetons et bien plus.
Ce billet est le septi�me que j��cris sur le sujet. Les billets pr�c�dents ont port� sur les points suivants :
Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET
S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4
IdentityServer4 : cr�ation et configuration du Client pour acc�der � une Web API ASP.NET Core s�curis�e
IdentityServer4 : Authentification d�un utilisateur avec OpenID Connect
IdentityServer4 : cr�ation et configuration d�un client utilisant OpenID Connect
IdentityServer4 : Autoriser l�application MVC � acc�der � l�API, via le jeton obtenu du STS
Dans la section pr�c�dente, nous avons vu comment mettre en place l�authentification par formulaire en utilisant OpenID Connect. Maintenant, nous voulons offrir l�opportunit� � l�utilisateur de se connecter en utilisant son compte Microsoft.
IdentityServer offre la prise en charge de l�authentification en utilisant un provider externe. La mise en place de cela est assez simple dans la mesure ou ASP.NET Core offre en natif la prise en charge de l�authentification avec un compte Google, Facebook, Twitter et Microsoft.
Enregistrement de l�application
Avant de configurer l�authentification Microsoft pour notre application dans IdentityServer, nous devons d�abord enregistrer notre application dans le portail d�veloppeur de Microsoft.
Vous devez vous rendre sur la page suivante en utilisant votre compte Microsoft : https://apps.dev.microsoft.com/
Ensuite, cr�er une nouvelle application :
Une fois l�application cr��e, vous serez redirig� vers une nouvelle page vous permettant de g�n�rer un mot de passe. Cliquez sur le bouton � G�n�rer un nouveau mot de passe �. Copiez le mot de passe qui sera g�n�r� et sauvegardez-le. C�est l�unique fois que vous le verrez en clair dans ce portail. Vous en aurez besoin plus tard pour la configuration de votre application :
Maintenant, vous devez ajouter une nouvelle plateforme � votre application. Cliquez sur Ajouter une plateforme, puis s�lectionnez Web :
Ensuite vous devez saisir l�URL de redirection. Il s�agit de l�URL de l�application IdentityServer suivie de signin-microsoft : https://localhost:5001/signin-microsoft. Il s�agit du � callback � par d�faut pour l�authentification en utilisant le provider Microsoft.
Vous devez �galement saisir l�url de d�connexion qui sera au format suivant : https://localhost:5001/signout-callback-microsoft.
D�finissez les autorisations et les informations du profil utilisateur auxquelles l�application va demander les acc�s, puis enregistrez :
Revenez dans votre application IdentityServer et ouvrez le fichier Startup.cs. Vous devez modifier la m�thode ConfigureServices pour ajouter les services et configurer le provider pour l�authentification Microsoft :
1 2 3 4 5 6
| services.AddAuthentication().AddMicrosoftAccount("Microsoft", microsoftOptions =>
{
microsoftOptions.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
microsoftOptions.ClientId = "e62ce1d2-6cfe-4910-bd20-c6fed251d97e";
microsoftOptions.ClientSecret = "ogldbTxxxxxxxxxxx";
}); |
Vous devez renseigner l�ID de votre application cr�� sur le portail Microsoft dans le champ ClientId, puis le mot de passe dans le champ ClientSecret.
Le SignInScheme permet de sp�cifier le nom du cookie qui sera g�n�r� et permettra de sauvegarder temporairement les informations provenant du fournisseur d�authentification externe. IdentityServer offre la constante IdentityServerConstants.ExternalCookieAuthenticationScheme pour permettre de d�finir ce nom.
Le code complet de cette m�thode est le suivant.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
//configure identity server with in-memory stores, keys, clients and resources
services.AddIdentityServer()
.AddDeveloperSigningCredential()
.AddInMemoryIdentityResources(Config.GetIdentityResources())
.AddInMemoryApiResources(Config.GetApiResources())
.AddInMemoryClients(Config.GetClients())
.AddTestUsers(Config.GetUsers());
services.AddAuthentication().AddMicrosoftAccount("Microsoft", microsoftOptions =>
{
microsoftOptions.SignInScheme = IdentityServerConstants.ExternalCookieAuthenticationScheme;
microsoftOptions.ClientId = "e62ce1d2-6cfe-4910-bd20-c6fed251d97e";
microsoftOptions.ClientSecret = "ogldbTxxxxxxxxxxx";
});
} |
Ex�cutez votre application. Dans la page de connexion, vous aurez d�sormais un bouton pour Microsoft :
Lorsque vous cliquez dessus, vous �tes redirig� vers la page de connexion de Microsoft. Une fois connect� avec votre compte Microsoft, une page va s�afficher pour demander votre autorisation � partager vos informations avec l�application :
Une fois votre consentement donn�, vous �tes redirig� vers la page � laquelle vous vouliez acc�der initialement :
L'utilisation d'un provider tiers avec IdentityServer et ASP.NET Core s�av�re relativement simple. Dans le prochain billet, nous verrons comment utiliser GitHub comme provider externe.