Referência para desenvolvedores JWT
Exemplos de Decodificação JWT
Uso estes exemplos mínimos quando preciso inspecionar um JWT no código sem tratar decodificação como prova de autenticidade.
Exemplos por linguagem
JavaScript (browser)
function decodePart(part) {
const base64 = part.replace(/-/g, "+").replace(/_/g, "/");
const padded = base64.padEnd(base64.length + ((4 - (base64.length % 4)) % 4), "=");
const binary = atob(padded);
const bytes = Uint8Array.from(binary, c => c.charCodeAt(0));
return JSON.parse(new TextDecoder("utf-8").decode(bytes));
}
const [header, payload] = token.split(".");
console.log(decodePart(header));
console.log(decodePart(payload));Node.js
const [header, payload] = token.split(".");
const decodePart = part => JSON.parse(Buffer.from(part, "base64url").toString("utf8"));
console.log(decodePart(header));
console.log(decodePart(payload));Python
import base64, json
def decode_part(part):
part += "=" * (-len(part) % 4)
return json.loads(base64.urlsafe_b64decode(part).decode("utf-8"))
header, payload, _ = token.split(".")
print(decode_part(header))
print(decode_part(payload))Java
import java.nio.charset.StandardCharsets;
import java.util.Base64;
String[] parts = token.split("\.");
String headerJson = new String(Base64.getUrlDecoder().decode(parts[0]), StandardCharsets.UTF_8);
String payloadJson = new String(Base64.getUrlDecoder().decode(parts[1]), StandardCharsets.UTF_8);
System.out.println(headerJson);
System.out.println(payloadJson);C#
using System;
using System.Text;
static string DecodeBase64Url(string part) {
string value = part.Replace('-', '+').Replace('_', '/');
value = value.PadRight(value.Length + ((4 - value.Length % 4) % 4), '=');
return Encoding.UTF8.GetString(Convert.FromBase64String(value));
}
var parts = token.Split('.');
Console.WriteLine(DecodeBase64Url(parts[0]));
Console.WriteLine(DecodeBase64Url(parts[1]));Go
package main
import (
"encoding/base64"
"fmt"
"strings"
)
func main() {
parts := strings.Split(token, ".")
header, _ := base64.RawURLEncoding.DecodeString(parts[0])
payload, _ := base64.RawURLEncoding.DecodeString(parts[1])
fmt.Println(string(header))
fmt.Println(string(payload))
}PHP
function decode_base64url(string $part): string {
$value = strtr($part, '-_', '+/');
$value .= str_repeat('=', (4 - strlen($value) % 4) % 4);
return base64_decode($value, true);
}
[$header, $payload] = explode('.', $token);
var_dump(json_decode(decode_base64url($header), true));
var_dump(json_decode(decode_base64url($payload), true));O que mantenho igual em todas as linguagens
- Normalizo Base64URL corretamente em vez de assumir Base64 comum.
- Converto bytes para UTF-8 antes de interpretar JSON.
- Trato header e payload como dados não confiáveis até a verificação da assinatura.
- Issuer, audience, tempo e política de algoritmo ficam na configuração da aplicação.