Les JSON Web Tokens (ou JWT) sont des moyens d’échanger de façon sécurisée des données entre deux parties. Tout dépend ensuite de ce qu’on attend par sécurisé…
Norme
Tout d’abord, un des gros intérêts de ce dispositif est d’être normalisé (santardisé) par la RFC 7519 – JSON Web Token (JWT) (ietf.org).
Structure
Un token est composé de 3 parties, séparées par un point.
Header
L’en-tête (encodé en base64URL) contient les informations qu’on attend à cet endroit, principalement le type du token (genre « JWT ») et l’algorithme utilisé pour la signature (exemple : « HS256 », signifiant en réalité HMAC SHA256, mais cela peut aussi être du RSA).
Payload
La charge utile (également encodée en base64URL) contient les données que l’on souhaite échanger de façon sécurisée, en format JSON. Il existe un registre d’items (appelés claims) qui normalisent un peu le contenu, sachant que le payload peut contenir 3 sortes de claims :
- Registred claims, définis et recommandés pour une meilleure interopérabilité ;
- Public claims, déclaré dans un registre afin d’éviter les collisions ;
- Private claims, qui sont de nature libre mais qu’il convient de choisir en dehors des précédentes catégories.
Signature
La signature est constituée de l’ensemble header et payload donc on calcule la signature à partir de l’algorithme déclaré dans le header et du secret qui est… secret. La signature est facultative.