JSON Web Token - por que a carga útil é pública?


30

Não consigo entender o motivo para tornar publicamente as reivindicações / carga útil de um JWT após a decodificação da base64.

Por quê?

Parece que seria muito mais útil criptografá-lo com o segredo.

Alguém pode explicar por que ou em que situação manter esses dados públicos é útil?


quando você escreve JWT, você provavelmente quer dizer JWS. Como o JWE (que também é "subclasse" do JWT), na verdade, criptografa o conteúdo.
Alexey #

Respostas:


28

Você escolhe não criptografar a carga pelos mesmos motivos que escolhe não criptografar mais nada: o custo (por menor que seja) excede o benefício e muitos dados simplesmente não precisam ser protegidos dessa maneira.

O que você mais precisa de proteção são as pessoas que violam os dados, para que o registro errado seja atualizado ou a conta corrente de alguém recebe dinheiro que não deveria ter. A assinatura do JSON Web Token realiza isso, porque alterar qualquer parte da combinação de cabeçalho / carga / assinatura invalida o pacote.

Observe que você ainda pode proteger os pacotes na camada de transporte usando SSL.


Ah, entendo, então essencialmente o JWT é um novo token CSRF. Obrigado pela sua explicação, esclareceu a confusão.
ineedhelp

6
Nenhum JWT não é um novo token CSRF. Essas são duas coisas diferentes.
Ash

@ash se os detalhes de uma operação são armazenados no JWT e validados no servidor, o JWT não está desempenhando essencialmente o papel de prevenção de CSRF nesse cenário? Entendo que o objetivo principal de um JWT de baunilha é a autenticação, que fica muito claro nesta resposta. Eu acho que estava imaginando adicionar mais dados e realizar duas coisas ao mesmo tempo.
ineedhelp

@RobertHarvey, você está usando o JWT incorretamente. JST é um termo "abrangente" para JWS e JWE. O JWS é para autenticar, o JWE é para criptografar. Portanto, "o objetivo de um JSON Web Token é autenticar" deve ser realmente "o JWS é autenticar".
Alexey

@ Alexey: Eu fiz uma ligeira alteração na minha resposta para acomodar.
Robert Harvey

4

O uso do termo assinatura no RFC é análogo a uma assinatura digital em criptografia assimétrica. Na criptografia assimétrica, se o remetente criptografar uma mensagem com sua chave privada, qualquer pessoa que possua a mensagem poderá descriptografá-la com a chave pública do remetente. Portanto, o objetivo com o termo assinatura não é manter uma mensagem em segredo, mas verificar a integridade / remetente da mensagem, que não foi alterada.

No caso de JWTs, o sistema de envio é o criador e consumidor da mensagem (veja o diagrama abaixo), e o objetivo é garantir que o token passado ao usuário não seja violado (por exemplo, privilégios elevados).

E como o @Robert mencionou, os JWTs podem / ainda devem ser criptografados com TLS.

Aqui está uma boa explicação das JWTs e assinaturas das quais a imagem abaixo é originária. 5 etapas fáceis para entender JSON Web Tokens (JWT)

asdfasdf


2

Para adicionar à resposta de Robert Harveys, há uma desvantagem significativa na criptografia da carga - isso significa que o destinatário do serviço precisa compartilhar um segredo com o servidor de autenticação (a chave de criptografia) para entender se o portador do token está ou não autorizado ou não. Por outro lado, qualquer um pode validar um JWT usando apenas a chave pública publicada pelo servidor de autenticação.

Essa é uma parte essencial da especificação de conexão aberta, pois permite que aplicativos clientes validem tokens de identidade emitidos pelo servidor de autenticação, além de facilitar a implantação de servidores de recursos (pois eles não precisam ser implantados com acesso à criptografia secreta). chave) e também ajuda ao tentar diagnosticar problemas com um JWT emitido.


Você está tentando comparar mecanismos de criptografia assimétrica e simétrica, o jwt é uma implementação da criptografia RSA.
TheAnimatrix 15/01
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.