JWT 開発者リファレンス
JWT デコード コード例
アプリコードで JWT を確認するとき、デコードを真正性の証明と混同しない最小例として使います。
言語別 JWT デコード例
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));どの言語でも変えないルール
- 通常の Base64 と決めつけず Base64URL を正規化します。
- JSON parse の前に UTF-8 としてデコードします。
- 署名検証が成功するまでは header/payload を未信頼データとして扱います。
- issuer、audience、時間、alg policy はアプリ設定で管理します。