IdentifiantMot de passe
Loading...
Mot de passe oubli� ?Je m'inscris ! (gratuit)
Voir le flux RSS

Blog de Hinault Romaric (.NET Core, ASP.NET Core, Azure, DevOps)

[Actualit�] IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification

Note : 2 votes pour une moyenne de 3,00.
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� �.

Nom : img4.png
Affichages : 14822
Taille : 38,6 Ko


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.

Nom : img5.png
Affichages : 8442
Taille : 27,1 Ko

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.

Nom : img6.png
Affichages : 8020
Taille : 13,2 Ko

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 :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
Add-Migration CreateIdentitySchema
Update-Database
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
dotnet ef migrations add CreateIdentitySchema
dotnet ef database update
Un fichier AspNetCoreIdentityServer.db sera cr�� � la racine de votre projet.

Configuration d�IdentityServer pour utiliser ASP.NET Core Identity

� cette �tape, nous allons dans un premier temps ajouter � notre projet le package IdentityServer4.AspNetIdentity :

Nom : img7.png
Affichages : 8887
Taille : 37,2 Ko

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.

Nom : img8.png
Affichages : 8321
Taille : 25,5 Ko


Si nous nous connectons avec l�application MVCAppClient une fois un utilisateur cr��, nous verrons ce qui suit :

Nom : img9.png
Affichages : 8191
Taille : 18,5 Ko

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.

Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Viadeo Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Twitter Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Google Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Facebook Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Digg Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Delicious Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog MySpace Envoyer le billet � IdentityServer4 : utiliser ASP.NET Core Identity pour l�authentification � dans le blog Yahoo

Commentaires

  1. Avatar de callo
    • |
    • permalink
    Merci beaucoup. J'attendais ce billet sur l'int�gration avec ASP.NET Core Identity.
    Excellent travail et bonne continuation .