L’authentification et la gestion des autorisations est un aspect clé dans les API.Elle permet de vérifier les permissions , les droits d’accès des applications qui se connectent ( via un utilisateur ou une autorisation déléguée).Elles sont largement utilisées aujourd’hui et sont généralement contenues dans les headers des requêtes comme par exemple JSON Web Token (JWT) dont le header est écrit de la façon suivante :
Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Aujourd’hui nous allons donc voir comme propager ces valeurs contenues dans les headers des requêtes et nous avons pris comme exemple les autorisations qui seront à mon avis le cas le plus répandu.
Il peut nous arriver d’avoir à propager ces autorisations dans le cas d’une architecture microservice ou des services appellent des services par exemple.
Pour celà nous allons utiliser une libraire faite spécialement pour cela par Microsoft :
La librairie Microsoft.AspNetCore.HeaderPropagation fournit un middleware qui permet des propager des propriétés du header d’une requête entrante vers une requête sortante.
Utilisation
Pour l’utiliser il suffit de l’injecter dans la méthode ConfigureServices de notre Startup.cs jusqu’en .NET 5.0 ou dans le program.cs à partir de .net 6.0.
Pour l’exemple je vais prendre .NET 5.0 mais l’idée reste exactement la même en .NET 6.0.
services.AddHeaderPropagation(o =>
{
// propagate the header with same name if exist
o.Headers.Add("Accept-Language");
// Propagate header with different name if exist
o.Headers.Add("Accept-Language", "Lang");
// Propagate header with same name and a default value
o.Headers.Add("Accept-Language", context => "en");
// Propagate header with different name and a default value
o.Headers.Add("Accept-Language", "Lang", context => "en");
});
Dans l’exemple ci-dessus , j’ai mis quelques cas d’usage avec la langue et les comportements si la propriété et sa valeurs existent ou non dans le header mais cela fonctionne avec toutes les propriétés du header.
Ensuite dans la méthode Configure du Startup.cs toujours en .NET 5.0 , il suffit d’enregister son middleware comme suit :
app.UseHeaderPropagation();
Et enfin l’associer à un client HTTP :
services.AddHttpClient<MyClient>().AddHeaderPropagation();
Voila une manière simple de propager les autorisations ou tout autre propriété du header simplement.
Happy coding and have fun !
Articles similaires