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