4. JWT Claims (Rivendicazioni JWT)
Il JWT Claims Set (Set di rivendicazioni JWT) rappresenta un oggetto JSON i cui membri sono le rivendicazioni trasmesse dal JWT. I Claim Names (Nomi di rivendicazioni) all'interno di un JWT Claims Set devono essere unici (MUST). I parser JWT devono (MUST) rifiutare i JWT con nomi di rivendicazioni duplicati o utilizzare un parser JSON che restituisce solo l'ultimo nome di membro duplicato lessicalmente, come specificato nella Sezione 15.12 ("The JSON Object") di ECMAScript 5.1 [ECMAScript].
L'insieme di rivendicazioni che un JWT deve contenere per essere considerato valido dipende dal contesto ed è al di fuori dello scopo di questa specifica. Le applicazioni specifiche dei JWT richiederanno alle implementazioni di comprendere e processare alcune rivendicazioni in modi particolari. Tuttavia, in assenza di tali requisiti, tutte le rivendicazioni non comprese dalle implementazioni devono essere ignorate (MUST).
Esistono tre classi di JWT Claim Names: Registered Claim Names (Nomi di rivendicazioni registrati), Public Claim Names (Nomi di rivendicazioni pubblici) e Private Claim Names (Nomi di rivendicazioni privati).
4.1. Registered Claim Names (Nomi di rivendicazioni registrati)
I seguenti nomi di rivendicazioni sono registrati nel registro IANA "JSON Web Token Claims" istituito dalla Sezione 10.1. Nessuna delle rivendicazioni definite di seguito è destinata ad essere obbligatoria da utilizzare o implementare in tutti i casi, ma forniscono piuttosto un punto di partenza per un insieme di rivendicazioni utili e interoperabili. Le applicazioni che utilizzano JWT dovrebbero (SHOULD) specificare quali rivendicazioni specifiche utilizzano e quando sono richieste o opzionali. Tutti i nomi sono brevi perché un obiettivo fondamentale dei JWT è che la rappresentazione sia compatta.
4.1.1. "iss" (Issuer) Claim (Rivendicazione di emittente)
La rivendicazione "iss" (issuer) identifica il principale che ha emesso il JWT. L'elaborazione di questa rivendicazione è generalmente specifica dell'applicazione. Il valore "iss" è una stringa sensibile alle maiuscole/minuscole contenente un valore StringOrURI. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.2. "sub" (Subject) Claim (Rivendicazione di soggetto)
La rivendicazione "sub" (subject) identifica il principale che è il soggetto del JWT. Le rivendicazioni in un JWT sono normalmente dichiarazioni sul soggetto. Il valore del soggetto deve (MUST) essere limitato per essere localmente univoco nel contesto dell'emittente o essere globalmente univoco. L'elaborazione di questa rivendicazione è generalmente specifica dell'applicazione. Il valore "sub" è una stringa sensibile alle maiuscole/minuscole contenente un valore StringOrURI. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.3. "aud" (Audience) Claim (Rivendicazione di destinatari)
La rivendicazione "aud" (audience) identifica i destinatari a cui è destinato il JWT. Ogni principale destinato a processare il JWT deve (MUST) identificarsi con un valore nella rivendicazione di audience. Se il principale che processa la rivendicazione non si identifica con un valore nella rivendicazione "aud" quando questa rivendicazione è presente, allora il JWT deve essere rifiutato (MUST). Nel caso generale, il valore "aud" è un array di stringhe sensibili alle maiuscole/minuscole, ciascuna contenente un valore StringOrURI. Nel caso speciale in cui il JWT ha un solo destinatario, il valore "aud" può (MAY) essere una singola stringa sensibile alle maiuscole/minuscole contenente un valore StringOrURI. L'interpretazione dei valori di audience è generalmente specifica dell'applicazione. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.4. "exp" (Expiration Time) Claim (Rivendicazione di tempo di scadenza)
La rivendicazione "exp" (expiration time) identifica il tempo di scadenza al quale o dopo il quale il JWT non deve essere accettato (MUST NOT) per l'elaborazione. L'elaborazione della rivendicazione "exp" richiede che la data/ora corrente sia (MUST) prima della data/ora di scadenza elencata nella rivendicazione "exp". Gli implementatori possono (MAY) prevedere un piccolo margine, solitamente non più di alcuni minuti, per tenere conto dello sfasamento dell'orologio. Il suo valore deve (MUST) essere un numero contenente un valore NumericDate. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.5. "nbf" (Not Before) Claim (Rivendicazione di tempo di inizio validità)
La rivendicazione "nbf" (not before) identifica il tempo prima del quale il JWT non deve essere accettato (MUST NOT) per l'elaborazione. L'elaborazione della rivendicazione "nbf" richiede che la data/ora corrente sia (MUST) dopo o uguale alla data/ora di inizio validità elencata nella rivendicazione "nbf". Gli implementatori possono (MAY) prevedere un piccolo margine, solitamente non più di alcuni minuti, per tenere conto dello sfasamento dell'orologio. Il suo valore deve (MUST) essere un numero contenente un valore NumericDate. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.6. "iat" (Issued At) Claim (Rivendicazione di tempo di emissione)
La rivendicazione "iat" (issued at) identifica il momento in cui il JWT è stato emesso. Questa rivendicazione può essere utilizzata per determinare l'età del JWT. Il suo valore deve (MUST) essere un numero contenente un valore NumericDate. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.1.7. "jti" (JWT ID) Claim (Rivendicazione di ID JWT)
La rivendicazione "jti" (JWT ID) fornisce un identificatore univoco per il JWT. Il valore dell'identificatore deve (MUST) essere assegnato in modo tale da garantire che vi sia una probabilità trascurabile che lo stesso valore venga accidentalmente assegnato a un oggetto dati diverso; se l'applicazione utilizza più emittenti, le collisioni devono (MUST) essere prevenute anche tra i valori prodotti da emittenti diversi. La rivendicazione "jti" può essere utilizzata per impedire che il JWT venga riprodotto. Il valore "jti" è una stringa sensibile alle maiuscole/minuscole. L'uso di questa rivendicazione è opzionale (OPTIONAL).
4.2. Public Claim Names (Nomi di rivendicazioni pubblici)
I nomi di rivendicazioni possono essere definiti a piacimento da coloro che utilizzano i JWT. Tuttavia, per prevenire collisioni, qualsiasi nuovo nome di rivendicazione dovrebbe (SHOULD) essere registrato nel registro IANA "JSON Web Token Claims" istituito dalla Sezione 10.1 o essere un nome pubblico (Public Name): un valore che contiene un nome resistente alle collisioni (Collision-Resistant Name). In ciascun caso, il definitore del nome o del valore deve prendere precauzioni ragionevoli per assicurarsi di avere il controllo della parte dello spazio dei nomi che utilizza per definire il nome della rivendicazione.
4.3. Private Claim Names (Nomi di rivendicazioni privati)
Un produttore e un consumatore di un JWT possono (MAY) concordare di utilizzare nomi privati (Private Names) come nomi di rivendicazioni: nomi che non sono né nomi di rivendicazioni registrati (Sezione 4.1) né nomi di rivendicazioni pubblici (Sezione 4.2). A differenza dei nomi di rivendicazioni pubblici, i nomi di rivendicazioni privati sono soggetti a collisione e dovrebbero essere utilizzati con cautela.