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