Saltar para o conteúdo

JSON Web Token

Origem: Wikipédia, a enciclopédia livre.

O JSON Web Token (JWT, às vezes pronunciado /ɒt/) é um padrão da Internet para a criação de dados com assinatura opcional e/ou criptografia cujo payload contém o JSON que afirma algum número de declarações. Os tokens são assinados usando um segredo privado ou uma chave pública/privada.

Por exemplo, um servidor pode gerar um token com a declaração "logado como administrador" e fornecê-lo a um cliente. O cliente pode então usar esse token para provar que está logado como administrador. Os tokens podem ser assinados pela chave privada de uma parte (geralmente do servidor), para que a parte possa posteriormente verificar se o token é legítimo. Se a outra parte, por alguns meios adequados e confiáveis, estiver na posse da chave pública correspondente, ela também poderá verificar a legitimidade do token.[1]

Os tokens foram projetados para serem compactos, seguros para URL e utilizáveis, especialmente em um contexto de login único (SSO) no navegador da web. As declarações JWT geralmente podem ser usadas para transmitir a identidade de usuários autenticados entre um provedor de identidade e um provedor de serviços ou qualquer outro tipo de declaração, conforme exigido pelos processos de negócios.[2][3]

O JWT depende de outros padrões baseados em JSON: JSON Web Signature e o JSON Web Encryption.[4][5]

Estrutura[editar | editar código-fonte]

Um JWT é composto de três partes, o header, o payload e a assinatura, todas são escritas em JSON, e são codificadas usando Base64.[6]


O header especifica se o token será assinado, e caso seja qual o algorítmo usado para a assinatura usando a declaração obrigatória alg (algorítmo). Além disso pode conter as declarações opcionais typ (tipo de mídia) e cty (tipo de conteúdo).

{
"alg": "HS256",
"typ": "JWT"
}

O payload pode conter qualquer tipo de dado relevante para a aplicação, não existem declarações obrigatórias.

{
"sub": "1234567890",
"name": "John Doe",
"admin": true
}

A assinatura consiste da codificação e encriptação do header, payload e um segredo. Esse campo é usado para provar a autenticidade de um token, prevenindo que ele possa ser modificado por um agente malicioso. As declarações registradas para a assinatura são:

  • iss (issuer) quem criou o token;
  • sub (subject) sobre quem o token se refere;
  • aud (audience) para quem o token é esperado;
  • exp (expiration) data de expiração;
  • nbf (not before) a partir de quando o token é valido;
  • iat (issued at) data de criação;
  • jti (jwt id) identificador único;

A assinatura é verificada pela aplicação que deseja validar a autenticidade do token. Se o token for assinado com criptografia assimétrica, a chave pública pode ser optida através de uma API que fornece tal chave no formato de uma JWK.[7]

Ver também[editar | editar código-fonte]

Referências

  1. Nickel, Jochen (2016). Mastering Identity and Access Management with Microsoft Azure. [S.l.: s.n.] p. 84. ISBN 9781785887888. Consultado em 20 de julho de 2018 
  2. Sevilleja, Chris. «The Anatomy of a JSON Web Token». Consultado em 8 de maio de 2015 
  3. «Atlassian Connect Documentation». developer.atlassian.com. Consultado em 11 de maio de 2020 
  4. «draft-ietf-jose-json-web-signature-41 - JSON Web Signature (JWS)». tools.ietf.org. Consultado em 8 de maio de 2015 
  5. «draft-ietf-jose-json-web-encryption-40 - JSON Web Encryption (JWE)». tools.ietf.org. Consultado em 8 de maio de 2015 
  6. Peyrott, Sebastián (2016–2018). The JWT Handbook (PDF). [S.l.]: Auht0 Inc. 
  7. «JSON Web Key Sets». Auth0. Consultado em 16 de dezembro de 2022 
Este artigo é um esboço. Você pode ajudar a Wikipédia expandindo-o. Editor: considere marcar com um esboço mais específico.