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çalhoalg
. - O Tink só aceita os cabeçalhos
typ
,alg
ekid
. 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.