Comment utiliser JWT pour protéger ses APIs asp.net core

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 :

  1. 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
  2. Passage du token pour chaque futur échange avec l’API.

echange jwt 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 Smile

 

 

5 commentaires

Frédéric GUIGUI

12 mai 2020

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

22 mai 2020

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

9 juin 2020

Merci Evan, je pense qu’avec IdentityServer4 .netCore 3.1 la gestion du token jwt est simplifiĂ©e.
Cordialement.

Maxime

5 octobre 2020

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

20 octobre 2020

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.

Notre adresse

1 rue du guesclin
44000 Nantes

Notre téléphone

+33 2 79 65 52 87

Société

DevToBeCurious SARL
84860163900018 - Nantes B 848 601 639