Qual é o tamanho máximo do token JWT?

111

Eu preciso saber o comprimento máximo de

JSON Web Token (JWT)

Nas especificações não há informações sobre isso. Poderia ser isso, não há limitações de comprimento?

Bogdan
fonte

Respostas:

70

Como você disse, não há comprimento máximo definido no RFC7519 ( https://tools.ietf.org/html/rfc7519 ) ou em outros RFCs relacionados ao JWS ou JWE.

Se você usar o formato JSON Serialized ou JSON Flattened Serialized, não há limitação e não há razão para definir uma limitação.

Mas se você usar o formato JSON Compact Serialized (formato mais comum), você deve ter em mente que ele deve ser o mais curto possível, pois é usado principalmente em um contexto da web. Um JWT de 4kb é algo que você deve evitar.

Tome cuidado para armazenar apenas declarações úteis e informações de cabeçalho.

Florent Morselli
fonte
86

Também tenho tentado encontrar isso.

Eu diria - tente garantir que esteja abaixo de 7 kb .

Embora o JWT não defina nenhum limite superior na especificação ( http://www.rfc-editor.org/rfc/rfc7519.txt ), temos alguns limites operacionais. Como um JWT está incluído em um cabeçalho HTTP, temos um limite superior ( SO: Máximo em valores de cabeçalho HTTP ) de 8K na maioria dos servidores atuais.

Como isso inclui todos os cabeçalhos de solicitação <8kb, com 7kb dando uma quantidade razoável de espaço para outros cabeçalhos. O maior risco para esse limite seriam os cookies (enviados nos cabeçalhos e podem ficar grandes).

Como está criptografado e com base64, há pelo menos 33% de desperdício da string json original, portanto, verifique o comprimento do token criptografado final.

Um ponto final - proxies e outros dispositivos de rede podem aplicar um limite arbitrário ao longo do caminho ...

penderi
fonte
2
Existe alguma razão prática para evitar tokens "grandes" na faixa de 2-3 kb?
Samuel Elrod
1
@SamuelElrod provavelmente depende dos requisitos de seu aplicativo. 2-3kb para cada solicitação envolvendo um JWT acrescenta uma quantidade razoável de bagagem a ser trazida toda vez. Se isso afeta o desempenho percebido pelo usuário, você deve limitar isso.
Jack
1
Tente evitar o inchaço do seu token. Eu diria que 2-3k já está ficando grande demais, o que você tem aí? Meu token atual é de 320 bytes.
user2800708
4
Estou pensando em colocar um mapa de privilégios no meu. ele conterá as informações JWT comuns do usuário atual, bem como um mapa contendo o user_id e o tipo de privilégio para todos os usuários para os quais eles têm privilégios. Teoricamente, isso poderia crescer sem limites.
Nate maio
1
Interessante, também estou considerando um mapa de privilégios agora. No momento, meu plano é usar uma abordagem ingênua e colocá-los como array JSON e, se for um problema, tentarei compactar o conteúdo em um formato semelhante ao binário no futuro.
Ciantic
5

Ao usar o heroku, o cabeçalho será limitado a 8k. Dependendo de quantos dados você está usando no jwt2, ele será alcançado. A solicitação, quando superdimensionada, não afetará sua instância de nó, o roteador heroku a descartará antes de sua camada de API.

Ao processar uma solicitação de entrada, um roteador configura um buffer de recebimento de 8 KB e começa a ler a linha de solicitação HTTP e os cabeçalhos de solicitação. Cada um deles pode ter no máximo 8 KB de comprimento, mas juntos podem ter mais de 8 KB no total. As solicitações contendo uma linha de solicitação ou linha de cabeçalho com mais de 8 KB serão descartadas pelo roteador sem serem despachadas.

Veja: Limites Heroku

Tiago Gouvêa
fonte