[Actualit�] IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification
par , 24/07/2020 � 17h56 (10766 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 dixi�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
IdentityServer4 : prise en charge du provider tiers Microsoft pour l'authentification
IdentityServer4 : prise en charge du provider tiers Github pour l'authentification
IdentityServer4 : persistance des donn�es de configuration avec EntityFramework Core
Dans l'un des billets pr�c�dents, nous avons vu comment utiliser OpenID et permettre � l�utilisateur de s�authentifier via un formulaire. Pour la mise en place de la fen�tre de connexion, de d�connexion, etc., nous avons utilis� un Quickstart offert par IdentityServer. Ce mod�le repose sur TestUserStore, qui nous permet de d�finir et charger nos utilisateurs depuis un fichier inclus dans le projet.
Maintenant, nous voulons que les utilisateurs soient stock�s dans une base de donn�es et que des interfaces soient disponibles pour l�enregistrement d�un nouvel utilisateur, la connexion, la gestion de son compte, etc.
Toutefois, nous ne voulons non plus d�velopper ces fonctionnalit�s � partir de z�ro, pourtant ASP.NET Core nous offre le n�cessaire pour la gestion d�identit�.
� propos de ASP.NET Core Identity
ASP.NET Core Identity est un syst�me de gestion d�Identit� qui ajoute � une application ASP.NET Core des fonctionnalit�s de connexion, gestion de compte, modification de mot de passe, r�initialisation de mot de passe, etc.
ASP.NET Core Identity est configur� par d�faut pour utiliser EntityFramework Core pour assurer la persistance des donn�es. Les informations d�Identit� (nom d�utilisateur, mot de passe, donn�es de profil) peuvent �tre stock�es dans toute base de donn�es support�e par EntityFramework Core.
Avec la version 2.1 de ASP.NET Core, ASP.NET Core Identity est d�sormais disponible comme une biblioth�que de classes Razor. Ce qui signifie qu�il est d�sormais possible d�utiliser le scaffolding pour g�n�rer le code de gestion d�identit� dans une application existante.
ASP.NET Core Identity et IdentityServer4
IdentityServer a �t� con�u pour �tre extensible et flexible. De fait, il est possible d�utiliser IdentityServer tout en d�l�guant le stockage de donn�es et la gestion des comptes � ASP.NET Core Identity. Voyons comment proc�der.
Int�gration de ASP.NET Core Identity au projet
Reprenons notre projet pr�c�dent. Vous pouvez le t�l�charger sur mon compte GitHub � l�adresse suivante : https://github.com/hinault/identitys...ee/aspnetcore2.
Pour la persistante, nous allons utiliser une base de donn�es SQLite. La premi�re chose � faire sera d�ajouter le package correspondant : Microsoft.EntityFrameworkCore.Sqlite.
L��tape suivante sera la g�n�ration du code pour Identity. Pour cela, vous devez faire un clic droit sur votre projet, aller sur Ajouter, ensuite cliquer sur � Nouvel �l�ment g�n�r� automatiquement� �.
Dans la liste des mod�les install�s, vous devez s�lectionner Identit� et cliquer sur Ajouter. Une fen�tre va s�afficher permettant de s�lectionner les fichiers � g�n�rer (AccessDenied, ForgotPassword, Login, Logout, ChangePassoword, Register, Index, ResetPassword).
Ensuite, nous devons d�finir le DataContext que nous souhaitons utiliser pour la persistance des donn�es. Nous devons en cr�er un nouveau. Vous devez cliquer sur le � + � dans la ligne correspondante puis sur Ajouter.
Nous allons utiliser SQLite comme base de donn�es. Vous devez donc cocher la case � Use SQLite instead of SQL Server �.
Nous allons �galement ajouter une nouvelle classe utilisateur ayant pour nom � ApplicationUser �. Une fois cela effectu�, cliquez sur Ajouter.
Le code permettant d�int�grer la gestion d�identit� dans votre projet est g�n�r� dans le dossier Areas/Identity. Ce code a �t� d�velopp� en utilisant Razor Pages. Il faut noter qu�ASP.NET Core MVC, Web API et Razor Page peuvent cohabiter sans aucun probl�me dans le m�me projet.
La configuration des services d�Identit� se trouve dans le fichier Areas/Identity/IdentityHostingStartup.cs. Je ne vais pas m�attarder sur les d�tails d�impl�mentation de ASP.NET Core Identity. Pour en savoir plus sur le sujet, vous pouvez consulter le tutoriel suivant.
G�n�ration de la base de donn�es
Nous allons utiliser la migration pour g�n�rer la base de donn�es SQLite. Dans la console de gestion de package de Visual Studio, vous devez ex�cuter les deux commandes suivantes :
Si vous voulez le faire en utilisant l�invite de commande, vous devez ex�cuter les deux commandes suivantes :
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 Add-Migration CreateIdentitySchema Update-Database
Un fichier AspNetCoreIdentityServer.db sera cr�� � la racine de votre projet.
Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2 dotnet ef migrations add CreateIdentitySchema dotnet ef database update
Configuration d�IdentityServer pour utiliser ASP.NET Core Identity
� cette �tape, nous allons dans un premier temps ajouter � notre projet le package IdentityServer4.AspNetIdentity :
Une fois le package installer, nous allons �diter le fichier Startup.cs et remplacer AddTestUsers(Config.GetUsers()) par AddAspNetIdentity<ApplicationUser>(). Il faudra �galement ajouter le service suivant AddInMemoryPersistedGrants().
Nous devons �galement sp�cifier les pages de connexion et d�connexion qui seront dor�navant utilis�es :
Code c# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 services.AddIdentityServer(options => { options.UserInteraction.LoginUrl = "/Identity/Account/Login"; options.UserInteraction.LogoutUrl = "/Identity/Account/Logout"; })
Le code complet de la m�thode ConfigureServices devient ceci :
Code c# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 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(options => { options.UserInteraction.LoginUrl = "/Identity/Account/Login"; options.UserInteraction.LogoutUrl = "/Identity/Account/Logout"; }) .AddDeveloperSigningCredential() .AddInMemoryPersistedGrants() .AddInMemoryIdentityResources(Config.GetIdentityResources()) .AddInMemoryApiResources(Config.GetApiResources()) .AddInMemoryClients(Config.GetClients()) .AddAspNetIdentity<ApplicationUser>(); }
Vous devez modifier par d�faut la configuration de ASP.NET Core Identity pour d�finir l�entit� utilis�e pour la gestion de r�le. Pour cela, devez �diter le fichier IdentityHostingStartup.cs et changer services.AddDefaultIdentity<ApplicationUser>() par services.AddIdentity<ApplicationUser,IdentityRole>().
Le code de cette classe devient ce qui suit :
Code c# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10
11
12
13 public void Configure(IWebHostBuilder builder) { builder.ConfigureServices((context, services) => { services.AddDbContext<AspNetCoreIdentityServerContext>(options => options.UseSqlite( context.Configuration.GetConnectionString("AspNetCoreIdentityServerContextConnection"))); services.AddDefaultIdentity<ApplicationUser>() .AddEntityFrameworkStores<AspNetCoreIdentityServerContext>() .AddDefaultTokenProviders() .AddDefaultUI(); }); }
Sauvegardez et ex�cutez votre application. Lorsque vous allez essayer d�acc�der � une ressource s�curis�e, vous verrez le formulaire de Login d�ASP.NET Core Identity.
Si nous nous connectons avec l�application MVCAppClient une fois un utilisateur cr��, nous verrons ce qui suit :
C�est tout pour cette partie. Dans la prochaine partie, nous verrons comment utiliser notre propre service d'acc�s au donn�es pour authentifier un utilisateur et comment d�finir les revendications de ce dernier dans ce cas.










