Was ist die maximale Größe des JWT-Tokens?

111

Ich muss die maximale Länge von kennen

JSON Web Token (JWT)

In den technischen Daten gibt es keine Informationen darüber. Könnte es sein, dass es keine Längenbeschränkungen gibt?

Bogdan
quelle

Antworten:

70

Wie Sie sagten, ist im RFC7519 ( https://tools.ietf.org/html/rfc7519 ) oder anderen RFCs im Zusammenhang mit JWS oder JWE keine maximale Länge definiert .

Wenn Sie das JSON Serialized-Format oder das JSON Flattened Serialized-Format verwenden, gibt es keine Einschränkung und es gibt keinen Grund, eine Einschränkung zu definieren.

Wenn Sie jedoch das JSON Compact Serialized-Format (das am häufigsten verwendete Format) verwenden, müssen Sie berücksichtigen, dass es so kurz wie möglich sein sollte, da es hauptsächlich in einem Webkontext verwendet wird. Ein 4kb JWT ist etwas, das Sie vermeiden sollten.

Achten Sie darauf, nur nützliche Ansprüche und Header-Informationen zu speichern.

Florent Morselli
quelle
86

Ich habe auch versucht, dies zu finden.

Ich würde sagen - versuchen Sie sicherzustellen, dass es unter 7 KB ist .

Während JWT in der Spezifikation keine Obergrenze definiert ( http://www.rfc-editor.org/rfc/rfc7519.txt ), haben wir einige Betriebsgrenzen. Da ein JWT in einem HTTP-Header enthalten ist, haben wir auf den meisten aktuellen Servern eine Obergrenze ( SO: Maximum für http-Header-Werte ) von 8 KB.

Da dies alle Anforderungsheader <8 KB umfasst, bietet 7 KB ausreichend Platz für andere Header. Das größte Risiko für dieses Limit wären Cookies (die in Headern gesendet werden und groß werden können).

Da es verschlüsselt und base64ed ist, wird mindestens 33% der ursprünglichen JSON-Zeichenfolge verschwendet. Überprüfen Sie daher die Länge des endgültigen verschlüsselten Tokens.

Ein letzter Punkt: Proxys und andere Netzwerkgeräte können auf dem Weg ein beliebiges Limit festlegen ...

penderi
quelle
2
Gibt es einen praktischen Grund, "große" Token im Bereich von 2-3 KB zu vermeiden?
Samuel Elrod
1
@SamuelElrod es hängt wahrscheinlich von den Anforderungen Ihrer Anwendung ab. 2-3 KB für jede Anfrage, an der ein JWT beteiligt ist, fügen eine anständige Menge an Gepäck hinzu, die jedes Mal über den Draht gebracht werden muss. Wenn sich dies auf die vom Benutzer wahrgenommene Leistung auswirkt, würden Sie dies einschränken.
Jack
1
Vermeiden Sie es, Ihren Token aufzublähen. Ich würde sagen, 2-3k werden schon viel zu groß. Was hast du da drin? Mein aktuelles Token ist 320 Bytes.
user2800708
4
Ich denke darüber nach, eine Privilegienkarte in meine zu stecken. Es enthält die allgemeinen JWT-Informationen des aktuellen Benutzers sowie eine Zuordnung mit der Benutzer-ID und dem Berechtigungstyp für alle Benutzer, für die sie Berechtigungen haben. Dies könnte theoretisch ungebunden wachsen.
Nate
1
Interessant, ich denke auch darüber nach, gerade eine Karte mit Privilegien zu schaufeln. Im Moment ist mein Plan, einen naiven Ansatz zu verwenden und sie als JSON-Array zu schaufeln. Wenn es ein Problem ist, werde ich versuchen, den Inhalt in Zukunft in ein binäres Format zu packen.
Ciantic
5

Bei Verwendung von Heroku ist der Header auf 8 KB begrenzt. Abhängig davon, wie viele Daten Sie auf jwt2 verwenden, werden sie erreicht. Wenn die Anforderung übergroß ist, wird Ihre Knoteninstanz nicht berührt. Der Heroku-Router löscht sie vor Ihrer API-Ebene.

Bei der Verarbeitung einer eingehenden Anforderung richtet ein Router einen 8-KB-Empfangspuffer ein und beginnt mit dem Lesen der HTTP-Anforderungszeile und der Anforderungsheader. Jedes von diesen kann höchstens 8 KB lang sein, zusammen kann es jedoch insgesamt mehr als 8 KB betragen. Anfragen, die eine Anforderungs- oder Kopfzeile enthalten, die länger als 8 KB ist, werden vom Router ohne Versand verworfen.

Siehe: Heroku-Grenzen

Tiago Gouvêa
quelle