Gerador de JWT
Crie um Web Token JSON assinado com suas próprias declarações JSON. Escolha HS256, HS384 ou HS512 com um segredo compartilhado, RS256 a PS512 com uma chave privada RSA, ES256 a ES512 com a chave EC correspondente, ou EdDSA com uma chave Ed25519, fornecida como PEM ou JWK. O gerador pode adicionar iat, exp e um cabeçalho kid, assina com a biblioteca jose e exibe o token compacto ao lado do cabeçalho e da carga útil decodificados.
Perguntas frequentes
Quais algoritmos de assinatura posso usar?
O gerador é compatível com HS256, HS384 e HS512 usando um segredo compartilhado; RS256, RS384, RS512, PS256, PS384 e PS512 usando uma chave privada RSA; ES256, ES384 e ES512 usando uma chave privada EC em P-256, P-384 ou P-521; e EdDSA usando uma chave privada Ed25519. O algoritmo escolhido é gravado no cabeçalho alg, e typ é sempre definido como JWT.
O que devo inserir como carga útil?
Insira um objeto JSON com suas declarações, por exemplo, sub, name, iss, aud ou qualquer membro personalizado. Matrizes, strings e outros valores que não sejam objetos são rejeitados, porque uma carga útil JWT precisa ser um objeto JSON. A ordem e os valores das declarações são mantidos exatamente como você os escreveu.
Como o segredo HMAC é lido?
Para HS256, HS384 e HS512, o segredo é usado como texto UTF-8 após a remoção dos espaços em branco no início e no fim. Se o seu segredo for binário, cole-o como um JWK, por exemplo {"kty": "oct", "k": "..."}, com os bytes em base64url; nesse caso, os bytes decodificados serão usados. Chaves PEM são recusadas para algoritmos HMAC, pois usar uma chave pública como segredo HMAC é um erro clássico.
Qual deve ser o tamanho de um segredo HS256?
A RFC 7518 exige uma chave com pelo menos o mesmo tamanho da saída do hash: 32 bytes para HS256, 48 para HS384 e 64 para HS512. A ferramenta assina com segredos mais curtos para que você possa reproduzir tokens de teste, mas segredos de produção devem ser valores aleatórios longos, por exemplo, gerados pelo Password Generator.
Quais formatos de chave privada são aceitos para RSA, EC e EdDSA?
Cole uma chave privada PEM não criptografada no formato PKCS #8 (BEGIN PRIVATE KEY), PKCS #1 (BEGIN RSA PRIVATE KEY) ou SEC1 (BEGIN EC PRIVATE KEY), ou uma JWK privada que contenha o membro d. Arquivos PEM criptografados e chaves privadas OpenSSH não são lidos. A chave precisa ser compatível com o algoritmo; por isso, ES384 requer uma chave P-384 e chaves RSA precisam ter pelo menos 2048 bits.
Como iat e exp são definidos?
Quando a opção de data de emissão está ativada, iat recebe a hora atual, a menos que sua carga útil já tenha uma declaração iat. Quando a expiração é maior que 0 segundos, exp recebe a hora atual mais esse número de segundos e substitui qualquer exp na sua carga útil. Com expiração igual a 0, nenhum exp é adicionado e o exp da sua carga útil é mantido.
Para que serve o campo kid?
Um ID de chave não vazio é gravado no cabeçalho kid para que os verificadores possam escolher a chave correta em um JWKS. Se você colar um JWKS como chave de assinatura, kid também selecionará qual chave do conjunto assinará o token. O JWK Converter e os geradores de chave mostram a impressão digital RFC 7638, que funciona bem como kid.
O que o resultado contém?
Você recebe o token compacto, o algoritmo, o ID da chave, os horários de emissão e expiração em UTC e o cabeçalho e a carga útil JSON exatos que foram assinados. Copie o token do primeiro bloco. Depois, decodifique-o com o JWT Decoder ou confira-o com o JWT Verifier.
Meus segredos ou chaves são armazenados?
Não. O segredo ou a chave privada é enviado apenas na solicitação que assina o token, usado uma vez na memória e nunca registrado em logs ou salvo. Ainda assim, prefira chaves de teste para experimentos e nunca cole uma chave de assinatura de produção em qualquer ferramenta da Web, a menos que você controle o servidor.
Há limites de tamanho?
A carga útil pode ter até 65,536 caracteres, a chave até 65,536 caracteres e kid até 256 caracteres. Os valores de expiração vão de 0 a 315,360,000 segundos, o equivalente a dez anos. Entradas mais longas são rejeitadas com uma mensagem que identifica o campo.