Bien qu’il existe bons nombres de méthodes d’authentification et de protection des échanges avec une API, JWT s’impose tout doucement.
De plus en plus utilisé, nous nous sommes intéressés chez DevToBeCurious à sa mise en place dans asp.net core.
Voyons ensemble comment mettre en place une première version d’authentification JWT.
Paramétrage du Startup.cs
Première étape indispensable : paramétrer le JWT dans le Startup.cs.
Activer le mode Authentification
Dans le Configure(), ajouter : app.UseAuthentication();
Et c’est tout.
Activer le JWT bearer
Ici, vous allez activer le JWT, en précisant la description de chaque Token d’échange.
Car oui, rappelons-le, JWT se base sur un token que le serveur génère et qui servira de clé d’authentification de chaque futur échange avec le serveur.
Ainsi, depuis une application Angular par exemple, qui appellera notre API, vous allez devoir respecter, à minima deux étapes :
- Demande d’authentification pour récupération du token
Souvent ici, vous allez authentifier la personne qui utilise votre application, et si c’est ok, renvoyer le token - Passage du token pour chaque futur échange avec l’API.
Assemblies à importer
Pour que tout fonctionne, vous devez utiliser les assemblies suivantes (et donc les importer si manquantes) :
- Microsoft.AspNetCore.Authentication.JwtBearer
- Microsoft.IdentityModel.Tokens
A propos des validations
En activant la validation du Issuer et de l’Audience, vous devrez bien faire attention lors de la création du token pour les futurs échanges.
Ainsi, l’Issuer présent dans le Startup devra être le même que celui reçu à chaque demande, par la suite.
Sinon la sentence sera immédiate : HTTP 401
Authentification et génération du token
Une fois le paramétrage fait dans le Startup :
- préparer un UserController, ou bien un TokenController
- puis, préparer une méthode d’authentification (login, mot de passe en paramètre)
c’est cette méthode qui va renvoyer le token d’échange
Vous noterez deux points très importants :
- pour profiter de la méthode Ok(), votre classe doit hériter de ControllerBase
- la classe JwtSecurityTokenHandler est dédiée à la génération du token
Protection des appels business, avec le token et Authorization
Une fois authentifiée, l’application pourra échanger avec l’API grâce au token.
Attention : le token a une durée de vie limitée !
Ici, vous avez peu de code à écrire (en dehors du code pour votre API):
- ajouter [Authorize(AuthenticationSchemes = JwtBearerDefaults.AuthenticationScheme)] au-dessus de votre classe
Et c’est tout
5 commentaires
Frédéric GUIGUI
UserModel c’est quoi ?
Comment fait l’appli cliente de l’api pour passer le token ?
Ca marche avec .netCore 3.1
Merci d’avance.
Cordialement.
Evan Boissonnot
Bonjour Frédéric
Ca marche avec dotnetcore 3.1 oui 🙂
L’appli cliente a plusieurs façon de le récup :
soit tu utilises un Interceptor, pour lire et stocker le token d’échange
soit tu utilises une librairie toute faite, par exemple pour Angular, yen a plein.
UserModel, c’est une classe que j’ai créée.
Frédéric
Merci Evan, je pense qu’avec IdentityServer4 .netCore 3.1 la gestion du token jwt est simplifiée.
Cordialement.
Maxime
Bonjour Evan,
Pourquoi avoir ajouter services.AddCords() ?
J’ai commenter cette partie et ça fonctionne parfaitement. Dans quels cas utilise t on ce service ?
Merci pour ton retour
Evan Boissonnot
bonjour Maxime
oui, le AddCors n’est pas nécessaire pour le jwt.
Le AddCors est là pour permettre l’accès sécurisé et autorisé intersite.
Comments are closed.