Tokens JSON Web (JWTs)

A Tink oferece suporte à geração e verificação de JWTs, que são um padrão amplamente usado na Web. A implementação de JWT da Tink oferece um subconjunto do padrão JWT definido na RFC 7519 que a equipe da Tink considera seguro para uso e que se encaixa bem na biblioteca Tink.

O Tink não oferece suporte a partes do padrão que são raramente usadas ou difíceis de usar corretamente. Estas são as limitações:

  • A Tink só é compatível com o formato JWS Compact Serialization. JWS JSON Serialization e JWE não são compatíveis.
  • A Tink não aceita o valor None no cabeçalho alg.
  • O Tink só aceita os cabeçalhos typ, alg e kid. Todos os outros cabeçalhos não são compatíveis.
  • A Tink não permite que os tokens sejam analisados antes que a assinatura ou o MAC seja verificado.

Assinaturas JWT

Se os tokens forem gerados e verificados por entidades diferentes, use chaves assimétricas com as primitivas JwtPublicKeySign e JwtPublicKeyVerify. A chave privada é usada para gerar tokens, e a chave pública é usada para verificar tokens. Os algoritmos compatíveis com essas primitivas são: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 e PS512.

Escolher um tipo de chave

As assinaturas JWT usam tipos de chave diferentes da assinatura digital normal no Tink. Isso é necessário porque alguns metadados (como alg e kid) precisam ser armazenados com a chave.

Recomendamos usar JWT_ES256 na maioria dos casos de uso. Os tokens gerados com esse tipo de chave sempre têm um cabeçalho kid. Se você preferir tokens um pouco mais curtos sem um cabeçalho kid, escolha o tipo de chave JWT_ES256_RAW. Para todos os tipos de chaves compatíveis, consulte Tipos de chaves compatíveis.

Distribuição de conjunto de chaves públicas

O Tink permite que conjuntos de chaves públicas sejam convertidos para e do formato de conjuntos JWK definido na RFC 7517, que a maioria das bibliotecas JWT entende.

A Tink não aceita a exportação de chaves JWT públicas em nenhum outro formato. O motivo é que outros formatos não contêm os metadados alg e kid para serem usados na verificação, o que torna o uso deles mais propenso a erros e pode dificultar a rotação de chaves.

É preferível não compartilhar o conjunto de chaves públicas apenas uma vez, mas fornecer uma maneira de atualizar automaticamente o conjunto de chaves públicas. Caso contrário, a rotação para uma nova chave é muito difícil. Isso geralmente é feito publicando o conjunto de chaves públicas em um URL confiável e seguro. Um servidor que verifica tokens precisa buscar novamente o conjunto de chaves públicas periodicamente no URL, por exemplo, uma vez por dia. Para fazer a rotação, a nova chave pública precisa ser adicionada ao conjunto de chaves públicas pelo menos um dia antes de ser usada para assinar tokens. Caso contrário, os novos tokens assinados com a nova chave privada serão rejeitados por servidores que ainda usam o conjunto de chaves públicas antigo.

JWT MAC

A Tink também é compatível com JWT com chaves simétricas usando a primitiva JwtMac. Use essa primitiva somente se os tokens forem gerados e verificados pela mesma entidade. Os algoritmos compatíveis com essa primitiva são HS256, HS384 e HS512.

Escolher um tipo de chave

Os tipos de chave MAC JWT são diferentes dos tipos de chave MAC normais. Recomendamos usar JWT_HS256 na maioria dos casos de uso.

Exemplos de casos de uso

Consulte Quero criar e verificar JWTs.