Tokens JWT JSON Web Token (JWT) és un estàndard obert per l'intercanvi de tokens d'autenticació en arquitectures client-servidor. Aquest tokens es troben en format JSON, en un entorn web, de forma segura i per verificar la identitat o el rol de l'usuari en la part client. Per exemple, si un client s'identifica com administrador en la seva interacció amb el servidor, aquest genera un token, que s'envia al client. En endavant, el client l'enviarà en totes les comunicacions per provar que efectivament té drets d'administrador. Els successius cops que el servidor rebi el token, mirarà la validesa del token o el repositori dels mateixos per comprovar quin rol ha de tractar en aquesta invocació. L'estructura d'un JWT és molt específica, consisteix en 3 cadenes de caràcters codificades en Base64 i separades per un punt. Cadascuna d'aquestes cadenes deriva d'un JSON amb una llista d'atributs (propietats) Format Un token JWT és un element compacte, fins i tot permet la impressió dels atributs que la componen, tots els elements finalitzen amb una signatura per verificar la seva autenticitat. Els atributs o claims són definicions o asseveracions sobre l'objecte a validar. Alguns d'aquests atributs, però formen part de les especificacions del mateix JWT, altres venen definits per l'usuari. Capçalera { "alg": "HS256", "typ": "JWT" } Identifica l'algorisme amb què ha estat generada la signatura HS256 indica que aquest testimoni és signat usant HMAC-SHA256. El més típic és usar els algorismes HMAC amb SHA-256 (HS256) i Signatura RSA amb SHA-256 (RS256). JWA (JSON Web Algorithms) {{RFC|7518}} n'introdueix més tant per autenticació com xifrat. Contingut { "usuari": "admin", "iat": 1422779638 } Conté les informacions que el client presenta. L'especificació JWT defineix set camps estàndards que acostumen a ser trobats aquí. També n'hi ha de personalitzats, segons quin sigui el propòsit del testimoni. En aquest exemple hi ha un clam estàndard, Issued At Time (iat) i un de personalitzat (identificació). Signatura HMAC_SHA256( secret, base64urlEncoding(capçalera) + '.' + base64urlEncoding(cos) ) Valida el testimoni de forma segura. El càlcul consisteix a codificar la capçalera i el contingut, usant codificació RFC 4648 Base64url, i concatenant-los amb un punt al mig. El resultat és xifrat segons indica la capçalera. El Base64url Encoding és similar a Base64, però usa diferents caràcters no alfanumèrics i omet caràcters de completat (padding). Les tres parts són codificades separadament emprant Base64URL Enconding i tots els apartats concatenats per produir el JWT final. Camps habituals iss ( issuer ) : Identifica el responsable que ha emès el JWT sub ( subject ) : És una cadena de caràcters case-sensitive o URI que identifica de forma única a què es refereix aquest JWT aud ( audience ) : Cadena de caràcters case-sensitive o URI unica que identifica els destinataris previstos per a aquest JWT exp ( expiration ) : Un numero que representa una data/hora específica em format "segons desde epoch" com es defeneix en POSIX. Aquesta data estableix el instant de temps a partir del qual aquest token JWT es considera invalid nbf ( not before ) : És l'oposat a exp. Es tracta d'un nombre que representa una data/hora en format "segons desdes epoch" com defineix POSIC, pero estableix a partir de quin instant de temps el token comença a ser valid iat ( issued at ) : Es tracta d'un numero que representa una data/hora, en el mateix format que exp i nbf, que indica el moment en que aquest token s'ha emes jti ( JWT ID ) : Aquest atribut representa un identificador unic per al JWT. S'utilitza per diferenciar tokens que puguin tenir similar contingut Tots els atributs definits en les RFC7519 tenen un nom curt per aconseguir l'objectiu que estableix que els token JWT han de ser el més petits possible.