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�] S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4

Note : 2 votes pour une moyenne de 5,00.
par , 14/10/2018 � 14h04 (7756 Affichages)
Dans mon billet pr�c�dent sur IdentityServer4, nous avons vu comment mettre en place un service de gestion s�curis� de gestion (STS) en utilisant IdentityServer4. Ce dernier est pr�t. Mais, il lui manque encore des ressources � s�curiser et des clients � g�rer l�acc�s.

Dans cette partie, nous verrons comment s�curiser une API en utilisant IdentityServer. Pour qu�un client puisse consommer l�API, il devra au pr�alable s�authentifier aupr�s de IdentityServer, pour obtenir un jeton d�acc�s qu�il utilisera pour acc�der � l�API.

1 - Cr�ation de l�API

La premi�re chose � faire sera la cr�ation de l�API. Nous allons ajouter � notre solution une nouvelle application ASP.NET Core Web API :

Nom : img4.PNG
Affichages : 8513
Taille : 28,8 Ko

Une fois l�application cr��e, nous allons ajouter un nouveau Controlleur d�API ayant pour nom SecureController, 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
[Route("api/[controller]")]
    [Authorize]
    public class SecureController : Controller
    {
        // GET: api/<controller>
        [HttpGet]
        public IActionResult Get()
        {
            return new JsonResult(from c in User.Claims select new { c.Type, c.Value });
        }
    }

Vous remarquerez que notre contr�leur est d�cor� avec l�attribut [Authorize]. Ce qui veut dire que tout acc�s aux m�thodes de cette classe est conditionn� par l�obtention au pr�alable des droits. Pour un client ayant des acc�s, il pourra visualiser les informations de revendication (Claims) associ�e � son profile utilisateur.

2 - Configuration d�IdentityServer

Nous allons configurer IdentityServer afin que ce dernier puisse proc�der � la validation du jeton de s�curit� d�un client, afin de s�assurer que ce dernier provient d�un client de confiance ayant les autorisations n�cessaires pour acc�der � l�API.

Pour cela, nous allons dans un premier temps ajouter le package IdentityServer4.AccessTokenValidation.

Nom : img5.PNG
Affichages : 7297
Taille : 80,0 Ko

Si vous utilisez Visual Studio Code, vous devez ex�cuter dans le terminal int�gr� la commande : dotnet add package IdentityServer4.AccessTokenValidation

Ensuite, nous allons �diter le fichier Startup.cs et modifier la m�thode ConfigureServices :

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 ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
 
            services.AddAuthentication("Bearer")
            .AddIdentityServerAuthentication(options =>
            {
                options.Authority = "https://localhost:5001";
                options.RequireHttpsMetadata = false;
 
                options.ApiName = "testapi";
            });
 
        }

La m�thode AddAuthentication() va permettre d�enregistrer aupr�s du conteneur d�IoC le service d�authentification en utilisant � Bearer � comme sch�ma par d�faut. Cette configuration permet � notre application d��tre bas�e sur une authentification par jeton (token authentication) basique. Avant d�acc�der � notre API, le client sera donc oblig� de passer un jeton d�autorisation dans l�ent�te HTTP.

La m�thode AddIdentityServerAuthentication va permettre d�enregistrer le service qui permettra de valider le jeton fourni par le client par IdentityServer.

Vous devez aussi modifier la m�thode Configure de la classe Startup pour ajouter au pipeline HTTP d�ASP.NET Core le middleware d�authentification :

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
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }
            else
            {
                app.UseHsts();
            }
 
            app.UseHttpsRedirection();
            app.UseAuthentication();
            app.UseMvc();
 
        }

Pour finir, je vous recommande �galement de modifier les propri�t�s du projet pour que l�API soit toujours accessible via les adresses :

https://localhost:5003
et
http://localhost:5002

Nom : img6.png
Affichages : 6698
Taille : 17,7 Ko

3 - R�f�rencement de l�API dans IdentityServer

Pour que notre API soit prot�g�e, nous devons la r�f�rencer aupr�s de IdentityServer comme ressource.

Pour cela, nous allons simplement �diter le fichier Config.cs dans l�application IdentityServer et ajouter notre API dans la liste des ApiResources :

Code C# : S�lectionner tout - Visualiser dans une fen�tre � part
1
2
3
4
5
6
7
 public static IEnumerable<ApiResource> GetApiResources()
        {
            return new List<ApiResource>
            {
                new ApiResource("testapi", "My Test API")
            };
        }

Le premier param�tre est le nom de l�API. Il doit �tre identique au nom d�API d�fini dans les options lors de l�appel � AddIdentityServerAuthentication dans le projet d�API.

Si vous essayez d�acc�der � l�adresse https://localhost:5003/api/secure dans votre navigateur, vous aurez l�erreur 401. Cela signifie qu�une authentification est n�cessaire pour acc�der � cette ressource.

NB : pour d�boguer et ex�cuter vos deux applications simultan�ment. Vous pouvez ouvrir deux invites de commandes, chacune positionn�e sur le r�pertoire de chaque projet et ex�cuter la commande dotnet run. Ou modifier les propri�t�s de votre solution Visual Studio pour d�finir les deux projets comme des projets de d�marrage.

C�est tout pour cette partie. Dans la prochaine partie, nous verrons comment mettre en place le client et lui donner les autorisations n�cessaires pour acc�der � l�API.

Restez connect� !

Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Viadeo Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Twitter Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Google Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Facebook Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Digg Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Delicious Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog MySpace Envoyer le billet � S�curisation d�une Web API ASP.NET Core avec le STS IdentityServer4 � dans le blog Yahoo

Commentaires