Qual è la dimensione massima del token JWT?


111

Ho bisogno di conoscere la lunghezza massima di

Token Web JSON (JWT)

Nelle specifiche non ci sono informazioni a riguardo. Potrebbe essere che non ci siano limiti di lunghezza?

Risposte:


70

Come hai detto, non esiste una lunghezza massima definita nella RFC7519 ( https://tools.ietf.org/html/rfc7519 ) o in altre RFC relative a JWS o JWE.

Se utilizzi il formato JSON Serialized o JSON Flattened Serialized, non ci sono limitazioni e non c'è motivo per definire una limitazione.

Ma se utilizzi il formato JSON Compact Serialized (il formato più comune), devi tenere presente che dovrebbe essere il più breve possibile perché viene utilizzato principalmente in un contesto web. Un JWT 4kb è qualcosa che dovresti evitare.

Assicurati di memorizzare solo reclami utili e informazioni di intestazione.


86

Ho anche cercato di trovare questo.

Direi: prova ad assicurarti che sia inferiore a 7kb .

Sebbene JWT non definisca alcun limite superiore nelle specifiche ( http://www.rfc-editor.org/rfc/rfc7519.txt ), abbiamo alcuni limiti operativi. Poiché un JWT è incluso in un'intestazione HTTP, abbiamo un limite superiore ( SO: massimo sui valori dell'intestazione http ) di 8K sulla maggior parte dei server attuali.

Poiché questo include tutte le intestazioni di richiesta <8kb, con 7kb che offre una quantità ragionevole di spazio per altre intestazioni. Il rischio maggiore per quel limite sarebbe i cookie (inviati nelle intestazioni e possono diventare grandi).

Poiché è crittografato e basato su base64, c'è almeno il 33% di spreco della stringa json originale, quindi controlla la lunghezza del token crittografato finale.

Un ultimo punto: proxy e altri dispositivi di rete possono applicare un limite abitrario lungo il percorso ...


2
C'è qualche ragione pratica per evitare gettoni "grandi" nell'intervallo 2-3kb?
Samuel Elrod

1
@SamuelElrod probabilmente dipende dai requisiti della tua applicazione. 2-3kb per ogni richiesta che coinvolge un JWT aggiunge una discreta quantità di bagaglio da portare ogni volta. Se ciò influisce sulle prestazioni percepite dall'utente, lo limiteresti.
Jack

1
Cerca di evitare di gonfiare il tuo gettone. Direi che 2-3k sta già diventando troppo grande, cosa hai lì dentro? Il mio token attuale è di 320 byte.
user2800708

4
Sto pensando di inserire una mappa dei privilegi nella mia. conterrà le informazioni JWT comuni dell'utente corrente, nonché una mappa contenente user_id e il tipo di privilegio per tutti gli utenti per i quali dispone dei privilegi. Questo potrebbe teoricamente crescere senza limiti.
Nate May,

1
Interessante, sto anche pensando di spalare una mappa dei privilegi in questo momento. In questo momento il mio piano è quello di utilizzare un approccio ingenuo e spalarli come array JSON, e se è un problema cercherò di impacchettare il contenuto in un formato binario in futuro.
Ciantic

5

Quando si utilizza heroku, l'intestazione sarà limitata a 8k. A seconda di quanti dati stai utilizzando su jwt2, sarà raggiunto. La richiesta, se sovradimensionata, non toccherà l'istanza del tuo nodo, il router heroku la lascerà cadere prima del tuo livello API.

Durante l'elaborazione di una richiesta in arrivo, un router imposta un buffer di ricezione da 8 KB e inizia a leggere la riga di richiesta HTTP e le intestazioni di richiesta. Ciascuno di questi può avere una lunghezza massima di 8 KB, ma insieme possono essere più di 8 KB in totale. Le richieste contenenti una riga di richiesta o una riga di intestazione più lunga di 8 KB verranno eliminate dal router senza essere inviate.

Vedi: Limiti di Heroku

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.