[Actualit�] Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET
par
, 29/09/2018 � 14h23 (11629 Affichages)
De nos jours, il est assez fr�quent qu�une entreprise se retrouve avec plusieurs applications, services et ressources d�ploy�s � travers divers canaux (Cloud, mobile, serveurs on-premise, etc.). Ces solutions sont architectur�es de telle sorte que la logique d�affaires soit offerte � travers des services/micro-services.
S�il s�agit d�applications, ressources ou services n�cessitant au pr�alable une authentification pour l�acc�s, chaque couche devra impl�menter son propre m�canisme d�authentification et de gestion des autorisations. Dans de nombreux cas, en utilisant une seule base de donn�es pour la gestion des utilisateurs et des acc�s.
Au lieu de dupliquer la logique d�authentification dans chaque application ou service, il est plus judicieux de se tourner vers un service de gestion s�curis�e de jetons (STS � Secure Token Service). Ce dernier servira de service d�authentification unique pour l�ensemble de vos ressources.
Concr�tement, lorsqu�un utilisateur voudra acc�der � partir de son navigateur, par exemple, � l�application Web, cette derni�re ne proc�dera pas directement � l�authentification de celui-ci. L�application Web proc�dera plut�t � une redirection de ce dernier vers le service de gestion s�curis�e de jeton. L�utilisateur s�authentifira aupr�s du STS et obtiendra un jeton de s�curit�. Ensuite, il sera redirig� vers l�application Web � laquelle il voulait acc�der initialement. Si � partir de cette application, il acc�de, par exemple, � une Web API, ce jeton pourra �tre utilis� pour confirmer son identit� et valider ses droits d�acc�s � cette ressource.
Par ailleurs, via la f�d�ration, il pourra acc�der � une autre application Web de l�entreprise sans avoir besoin de s�authentifier � nouveau.
Sur le march�, il existe de nombreuses solutions payantes et open source permettant de mettre en place un STS. L�une des solutions open source les plus c�l�bres dans l��cosyst�me .NET est IdentityServer.
C�est quoi IdentityServer
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.
Pour cette s�rie de billets, nous allons utiliser IdentityServer4. Cette version a �t� d�velopp�e en utilisant ASP.NET Core.
1 � Cr�ation du projet et configuration de IdentityServer
1-1 Cr�ation du projet
Nous allons commencer � partir de z�ro en cr�ant une nouvelle application ASP.NET Core qui sera notre IdentityServer. Elle doit �tre bas�e sur le mod�le � Vide � et n�avoir aucune authentification :
Une fois le nouveau projet cr��, vous devez ajouter une r�f�rence au package IdentityServer4, en utilisant le gestionnaire de packages NuGet :
Si vous utilisez Visual Studio Code, vous pouvez utiliser la commande :
1-2 Configuration d�IdentityServer
Code : S�lectionner tout - Visualiser dans une fen�tre � part Dotnet add package IdentityServer4
Vous aurez besoin d�enregistrer IdentityServer dans le conteneur d�injection de d�pendances de ASP.NET Core et ajouter le middleware de ce dernier dans le pipeline HTTP du Framework.
Pour enregistrer IdentityServer, vous devez �diter le fichier Startup.cs et modifier la m�thode ConfiguresServices comme suit :
Code C# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5 public void ConfigureServices(IServiceCollection services) { services.AddIdentityServer() .AddDeveloperSigningCredential(); }
AddIdentityServer est une m�thode d�extension qui permet d�enregistrer IdentityServer dans le conteneur d�IoC.
La d�pendance minimale dont nous avons besoin pour l�instant est AddDeveloperSigningCredential(). Cette extension permet de cr�er une cl� temporaire et le n�cessaire pour signer les jetons (Tokens). C�est pratique pour d�marrer en environnement de d�veloppement. Mais, vous ne devez pas le laisser tra�ner l� en production et vous devez fournir le n�cessaire pour g�rer cela.
Pour ajouter le middleware IdentityServer dans le pipeline HTTP de ASP.NET Core, vous devez modifier la m�thode Configure() du fichier Startup.cs et ajouter la ligne de code suivante :
Code C# : S�lectionner tout - Visualiser dans une fen�tre � part app.UseIdentityServer();
Le code complet de cette m�thode est :
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 public void Configure(IApplicationBuilder app, IHostingEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } app.UseIdentityServer(); app.Run(async (context) => { await context.Response.WriteAsync("Hello World!"); }); }
1-3 Configuration des clients et les ressources
Tout client qui fait appel � notre serveur de gestion d�identit� doit �tre un client de confiance. C�est pourquoi ce dernier doit �tre r�f�renc� dans l�application IdentityServer.
Par ailleurs, toute ressource (API par exemple), donc l�acc�s est s�curis�, doit �tre r�pertori�e dans l�application IdentityServer.
Pour cela, nous allons cr�er une classe Config, qui aura une m�thode GetClients, qui permettra de retourner la liste des clients support�s par l�application et une m�thode GetApiResources, qui retournera la liste des APIs que nous voulons s�curiser l�acc�s. Pour l�instant, puisque nous n�avons pas encore d�velopp� nos clients et nos ressources, ces listes seront vides.
Vous devez donc ajouter un nouveau fichier Config.cs � votre application avec le code suivant :
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
18
19
20
21
22
23
24
25 using IdentityServer4.Models; using System.Collections.Generic; namespace AspNetCoreIdentityServer { public class Config { public static IEnumerable<Client> GetClients() { return new List<Client> { }; } public static IEnumerable<ApiResource> GetApiResources() { return new List<ApiResource> { }; } } }
Une fois cela fait, vous devez �diter le fichier Startup.cs et modifier la m�thode ConfigureServices pour configurer IdentityServer pour qu�il utilise la liste des clients et les ressources que nous avons d�finis :
Code C# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
8
9
10 public void ConfigureServices(IServiceCollection services) { //configure identity server with in-memory stores, keys, clients and resources services.AddIdentityServer() .AddDeveloperSigningCredential() .AddInMemoryApiResources(Config.GetApiResources()) .AddInMemoryClients(Config.GetClients()); }
C�est tout. Nous venons de faire le minimum pour int�grer IdentityServer � notre projet. Nous pouvons d�sormais l�utiliser comme service de gestion s�curis�e des acc�s pour nos applications.
Mais avant, nous allons faire quelques modifications pour nous assurer que les clients pointeront toujours sur la bonne application.
1-4 Modification de l�h�te
Nous devons nous assurer que notre application IdentityServer sera toujours accessible via la m�me adresse lorsqu�elle est en ex�cution. Par ailleurs, en environnement de d�veloppement et lorsqu�on est en mode apprentissage, il est int�ressant de voir en temps r�el les logs de notre application dans la console.
Pour cela, nous allons acc�der � l�onglet � D�boguer � dans les propri�t�s de notre projet. Nous allons d�rouler la zone � Profil � et s�lectionner le nom de l'application (AspNetCoreIdentityServer).
Les URL suivantes doivent �tre d�finies dans le champ URL de l�application, si ce n�est pas le cas :
https://localhost:5001;http://localhost:5000
G�n�rez et ex�cutez votre application.
NB : Les projets ASP.NET Core 2.1 sont configur�s pour utiliser par d�faut SSL. Pour �viter les avertissements SSL dans le navigateur, vous devez accepter le certificat auto-sign� g�n�r� par ASP.NET Core. Une notification s�affichera � cet effet � la premi�re ex�cution de votre application.
Ouvrez votre navigateur et saisissez l�adresse URL :
http://localhost:5000/.well-known/openid-configuration
ou
https://localhost:5001/.well-known/openid-configuration
Vous obtiendrez le r�sultat suivant :
Vous venez de mettre en place votre service de gestion s�curis�e de jetons. Il est pr�t pour la s�curisation de vos ressources et l�authentification de vos clients.