C# Academy · Leçon

Structure et revendications JWT

Comprenez l’en-tête, la charge utile et la signature.

Leçon 1 sur 413 étapes

Structure et revendications JWT est une leçon C# Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage C# Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours C# Academy comprend 4 leçons au total.

Qu’est-ce qu’un JWT ?

Un jeton Web JSON (JWT) est un format compact de jeton compatible avec les URL, utilisé pour transmettre de manière sécurisée des revendications entre deux parties. Dans ASP.NET Core, c’est la manière la plus courante d’authentifier des API sans état.

Un JWT est simplement une chaîne composée de trois parties encodées en Base64Url et séparées par des points : header.payload.signature.

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0Iiwicm9sZSI6ImFkbWluIn0.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

L’en-tête

L’en-tête décrit la manière dont le jeton est signé. Il s’agit d’un petit objet JSON encodé en Base64Url dans le premier segment.

alg indique l’algorithme de signature, par exemple HS256 ou RS256, et typ vaut presque toujours JWT.

{
  "alg": "HS256",
  "typ": "JWT"
}

La charge utile

La charge utile contient les revendications : des déclarations concernant l’utilisateur ainsi que des métadonnées sur le jeton. Il s’agit du deuxième segment.

Important : la charge utile est seulement encodée, et non chiffrée. Tout le monde peut la décoder ; n’y placez donc jamais de secrets.

{
  "sub": "1234",
  "name": "Alice",
  "role": "admin",
  "exp": 1735689600
}

La signature

La signature garantit que le jeton n’a pas été altéré. Le serveur la calcule à partir de l’en-tête encodé, de la charge utile encodée et d’une clé secrète.

Si quelqu’un modifie un seul caractère de la charge utile, la signature ne correspond plus et la validation échoue.

HMACSHA256(
  base64UrlEncode(header) + "." + base64UrlEncode(payload),
  secretKey
)

Revendications enregistrées

Certains noms de revendication sont standardisés par la spécification JWT (RFC 7519). Ils utilisent des clés courtes de trois lettres :

  • iss - émetteur
  • sub - sujet (l’identifiant de l’utilisateur)
  • aud - audience
  • exp - date d’expiration (secondes Unix)
  • nbf - non valide avant
  • iat - date d’émission
{
  "iss": "https://api.myapp.com",
  "aud": "myapp-clients",
  "sub": "42",
  "exp": 1735689600,
  "iat": 1735686000
}

Revendications personnalisées

En plus de l’ensemble enregistré, vous pouvez ajouter toutes les revendications personnalisées dont votre application a besoin : rôles, autorisations, identifiants de locataire, adresse e-mail et autres.

Gardez la charge utile compacte : chaque revendication est transmise à chaque requête.

{
  "sub": "42",
  "email": "alice@myapp.com",
  "role": "admin",
  "tenant_id": "acme",
  "permissions": ["orders:read", "orders:write"]
}

Les revendications dans ASP.NET Core

Dans .NET, les revendications sont modélisées par le type System.Security.Claims.Claim. Chaque revendication est une paire type / valeur.

Lorsqu’un JWT est validé, ASP.NET Core transforme chaque entrée de la charge utile en une Claim sur le ClaimsPrincipal de l’utilisateur.

var claims = new List<Claim>
{
    new Claim(ClaimTypes.NameIdentifier, "42"),
    new Claim(ClaimTypes.Name, "Alice"),
    new Claim(ClaimTypes.Role, "admin"),
    new Claim("tenant_id", "acme")
};

ClaimsPrincipal et ClaimsIdentity

Un utilisateur authentifié est représenté par un ClaimsPrincipal, qui englobe un ou plusieurs objets ClaimsIdentity, chacun contenant un ensemble de revendications.

Dans un contrôleur, vous y accédez via User.

// Inside a controller action
var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);
bool isAdmin = User.IsInRole("admin");
string? tenant = User.FindFirst("tenant_id")?.Value;

Mappage des types de revendication

Par défaut, le gestionnaire JWT associe les clés JWT courtes à de longs types de revendication au format URI (par exemple, sub devient ClaimTypes.NameIdentifier).

Pour conserver les noms courts d’origine, désactivez une seule fois le mappage entrant au démarrage.

JwtSecurityTokenHandler.DefaultInboundClaimTypeMap.Clear();
// Now User.FindFirst("sub") returns the raw 'sub' claim

Pourquoi ne pas utiliser simplement un cookie de session

Les JWT sont autonomes : le serveur peut les valider en utilisant uniquement la clé de signature, sans interrogation de la base de données ni stockage de session côté serveur.

Ils sont donc idéaux pour les API mises à l’échelle horizontalement et les microservices, où n’importe quel nœud peut vérifier le même jeton.

// Client sends the token on every request:
// Authorization: Bearer eyJhbGciOiJIUzI1Ni...

Le compromis : révocation

Comme un JWT est autonome et considéré comme fiable jusqu’à son expiration, vous ne pouvez pas facilement en révoquer un avant son délai exp.

La solution courante consiste à conserver des jetons d’accès de courte durée et à les associer à des jetons d’actualisation (abordés plus loin dans ce cours).

// Short-lived access token
exp = iat + 15 * 60;  // 15 minutes

Vérification rapide

Vérifiez votre compréhension de la structure d’un JWT.

Récapitulatif

Vous avez appris la structure d’un JWT et le fonctionnement des revendications dans ASP.NET Core :

  • Un JWT se compose de header.payload.signature, chaque partie étant encodée en Base64Url.
  • La charge utile contient des revendications enregistrées et personnalisées, encodées mais non chiffrées.
  • La signature garantit l’intégrité au moyen d’un secret ou d’une paire de clés.
  • .NET transforme les revendications en un ClaimsPrincipal que vous consultez via User.

Ensuite, vous configurerez ASP.NET Core pour valider ces jetons.

Gratuit pour commencer

Apprends C# avec un tuteur IA — gratuit

Écris et exécute du vrai code dans ton navigateur, obtiens de l'aide instantanée d'un tuteur IA disponible 24h/24, et reprends là où tu t'es arrêté sur le web ou dans l'app.

Cours
93
Leçons
346

Questions Fréquemment Posées

La leçon « Structure et revendications JWT » est-elle gratuite ?

Oui — le texte complet de « Structure et revendications JWT » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours C# Academy, passe à CoddyKit PRO. Le cours C# Academy comprend 4 leçons au total.

Qu'est-ce que j'apprendrai dans « Structure et revendications JWT » ?

Comprenez l’en-tête, la charge utile et la signature. Tu pratiques C# Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.

Dois-je avoir de l'expérience pour commencer C# Academy ?

Aucune expérience préalable n'est requise. C# Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.

Combien de temps prend la leçon « Structure et revendications JWT » ?

La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.

Peux-tu écrire et exécuter du code dans cette leçon C# Academy ?

Oui. Chaque leçon C# Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.

Toutes les leçons de ce cours

  1. Structure et revendications JWT
  2. Configurer l’authentification JWT Bearer
  3. Émettre des jetons
  4. Jetons d’actualisation et expiration
← Retour à C# Academy