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�] Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET

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

Nom : intro1.png
Affichages : 18105
Taille : 28,2 Ko

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.

Nom : intro2.png
Affichages : 12095
Taille : 64,0 Ko

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 :

Nom : img1.PNG
Affichages : 12220
Taille : 26,8 Ko

Une fois le nouveau projet cr��, vous devez ajouter une r�f�rence au package IdentityServer4, en utilisant le gestionnaire de packages NuGet :

Nom : img2.PNG
Affichages : 12072
Taille : 69,9 Ko

Si vous utilisez Visual Studio Code, vous pouvez utiliser la commande :

Code : S�lectionner tout - Visualiser dans une fen�tre � part
Dotnet add package IdentityServer4
1-2 Configuration d�IdentityServer

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

Nom : img3.png
Affichages : 12324
Taille : 18,4 Ko

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 :

Nom : img3-1.PNG
Affichages : 11984
Taille : 47,8 Ko

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.

Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Viadeo Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Twitter Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Google Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Facebook Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Digg Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Delicious Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog MySpace Envoyer le billet � Mise en place d�un STS avec IdentityServer4 pour s�curiser ses applications .NET � dans le blog Yahoo

Commentaires

  1. Avatar de tomlev
    • |
    • permalink
    Salut,

    Merci pour l'article ! J'ai d�velopp� des serveurs d'authentification avec IdentityServer pour 2 applications r�cemment, et un tuto m'aurait bien aid�

    Il est pr�t pour la s�curisation de vos ressources et l�authentification de vos clients
    Oui enfin pour l'instant c'est difficilement exploitable, vu qu'il n'y a aucun client d�clar�... Mais je suppose que tu as pr�vu une suite !

    Si tu manques d'inspiration pour la suite, il pourrait �tre int�ressant d'aborder l'int�gration avec ASP.NET Core Identity, ou encore l'int�gration de providers d'identit� externes (Google, Facebook, AzureAD...), etc
    En tout cas c'est un vaste sujet !
  2. Avatar de Hinault Romaric
    • |
    • permalink
    Citation Envoy� par tomlev
    Salut,

    Merci pour l'article ! J'ai d�velopp� des serveurs d'authentification avec IdentityServer pour 2 applications r�cemment, et un tuto m'aurait bien aid�
    Merci pour ton retour.

    Citation Envoy� par tomlev
    Oui enfin pour l'instant c'est difficilement exploitable, vu qu'il n'y a aucun client d�clar�... Mais je suppose que tu as pr�vu une suite !
    Oui, bien sur. J'ai plusieurs autres billets sur le sujet que je compte publi�.