A Tink é compatível com a geração e verificação de JWTs, que são um padrão amplamente usado na Web. A implementação do JWT da Tink fornece um subconjunto do padrão JWT definido na RFC 7519 (links em inglês) que a equipe do Tink considera seguro de uso e que se encaixa bem na biblioteca do Tink.
A 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 de serialização compacta JWS. A serialização JSON da JWS e a JWE não têm suporte.
- A Tink não é compatível com o valor
None
no cabeçalhoalg
. - O Tink só é compatível com os cabeçalhos
typ
,alg
ekid
. Nenhum outro cabeçalho é compatível. - A Tink não permite que os tokens sejam analisados antes da verificação da assinatura ou do MAC.
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 aceitos por esses primitivos são:
ES256
, ES384
, ES512
, RS256
, RS384
, RS512
, PS256
, PS384
e
PS512
.
Como escolher um tipo de chave
As assinaturas JWT usam tipos de chaves diferentes da assinatura digital normal
no Tink. Isso é necessário porque alguns metadados, como alg
e kid
, precisam ser armazenados com a chave.
Recomendamos o uso de JWT_ES256
para a 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 ver todos os tipos de chave compatíveis, consulte
Tipos de chave compatíveis.
Distribuição do conjunto de chaves públicas
A Tink permite que o conjunto de chaves públicas seja convertido de/para o formato de conjuntos JWK definido na RFC 7517 (link em inglês), que a maioria das bibliotecas JWT entende.
A Tink não oferece suporte à 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
a serem usados na verificação, o que torna o uso deles mais propenso a erros
e pode dificultar a rotação das chaves.
É preferível não compartilhar o conjunto de chaves públicas somente uma vez, mas oferecer uma maneira de atualizar automaticamente o conjunto de chaves públicas. Caso contrário, será muito difícil fazer a rotação para uma nova chave. Isso geralmente é feito publicando o conjunto de chaves públicas em um URL confiável e seguro. Um servidor que verifica os tokens precisa refazer periodicamente o conjunto de chaves públicas desse URL, por exemplo, uma vez por dia. Para alternar a chave, a nova chave pública precisa ser adicionada ao conjunto de chaves públicas pelo menos um dia antes de ser usado para assinar tokens. Caso contrário, os novos tokens assinados com a chave privada nova serão rejeitados pelos servidores que ainda usarem o conjunto de chaves públicas antigo.
MAC do JWT
A Tink também oferece suporte a JWT com chaves simétricas com o JwtMac
primitivo. Use esse primitivo somente se os tokens forem gerados e verificados pela mesma entidade. Os
algoritmos com suporte a esse primitivo são HS256
, HS384
e
HS512
.
Como escolher um tipo de chave
Os tipos de chave MAC do JWT são diferentes dos tipos de chave MAC normais. Recomendamos
o uso de JWT_HS256
para a maioria dos casos.