Jwt.io での JWT 署名
この記事では、jwt.io を使用して JSON Web Token (JWT) に署名する方法を説明します。また、Java コードを使用して JWT に署名することもできます。
ヘッダーとペイロードを作成する
ヘッダーとは?
ヘッダー内の暗号操作により、JWtが署名されるか暗号化されるか、またどのようなアルゴリズム技術を使用するかが定義されます。
ヘッダーの例:
{ "alg":"RS256", "typ":"JWT" }
ペイロードとは?
ペイロードには、一般的にユーザー情報が含まれます。ペイロードに必須のクレームはありませんが、必要な数だけクレームを含めることができます。
ペイロードの例
{ "sub":"1234567890", "name":"John Doe", "admin": true, "iat":1516239022 }
Base64URLEncode HeaderとPayload を作成するには:
JWT.io デバッガにアクセスします。
ヘッダーセクションにアルゴリズムとトークンタイプを入力します。クレームを追加することも可能です。
ペイロードセクションにユーザー情報を入力する:
例
Base64URLEncode ヘッダー出力例:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9
Base64URLEncode ペイロード出力例:
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0
注記
JWT.io デバッガー UI は、Header.Payload としてフォーマットされた Base64URLEncode トークンを生成します。
ヘッダーとペイロードのハッシュを作成する
先ほど作成した Base64URLEncodeのヘッダーとペイロードを使って、OpenSSL または CertUtil でハッシュを作成します。
今回の例では、OpenSSL または CertUtil で (Y) を - SHA256 (RS256) (SHA256WithRSA) でハッシュ化することにします。
ヘッダーとペイロードのハッシュ形式:
(Y) = ヘッダー.ペイロード (Y)のBase64ハッシュを作成する。Base64URLEncode(RSASHA256(Y))
OpenSSL の例
Openssl dgst -sha256 “C:\path_to_file”
CertUtil の例
Certutil -hashfile “C:\path_to_file” SHA256
注記
ハッシュは16進数形式です。DigiCert® Software Trust Managerでハッシュに署名する前に、ハッシュを16進数形式から Base64 に変換する必要があります。
Base64.Guru Base64.Guru tを使用して、16進数をBase64に変換します:
Sha256 ハッシュ出力例
8041fb8cba9e4f8cc1483790b05262841f27fdcb211bc039ddf8864374db5f53
Base64 出力例
gEH7jLqeT4zBSDeQsFJihB8n/cshG8A53fiGQ3TbX1M=
REST APIを使用してヘッダーとペイロードのハッシュに署名する
以下の例では、Postman クライアント経由で、REST APIを使用して Base64 ハッシュに署名する方法を示しています。
このAPIの機能とパラメータの詳細については、こちらを参照してください。
Base64 署名付きハッシュの例:AxE9qm4aTZiXvA2G8sblAxjeLhomy7lTQpcPCV6q/7asKyegL3305BcV/EUF950yOeJQqMBplzhP+pAKCiGS0oFLXjNZvUsifCpQCqJfRKFyxpnD8agtbB9UZLEhSEET3lKPSF1Y0Sqbcz1SkFafV0PZ9Hi3HepUtjXQ8zLUxMt+3cBnK9a5I4gc32fq9Pkgt+3Ysnw02SIzdiCyoQGiDDJA9CtJ3RNY1DnOEL6qB4PzwQSrHz8hyXdlotpHQ1Izgms8Sv62w3VKQJBRjnRLNVhszO4tg3YsvXpINEkL4KCKLOCDwLT1Y+Tj8LANn2fbU5XeuDGa43k1bwNXmDH78w==
注記
上記の署名は Base64 形式です。jwt.io デバッガで署名を確認するには、署名をBase64URL形式に変換してください。
Base64 と Base64URL の主な違いとは?
Base64には +、/、= という文字が含まれていますが、これらは一部のファイルシステム名やURLで用意された意味があります。Base64urlは、+ を - に、/ を _ に置き換えることでこれを解決しています。末尾のパディング文字 = は、不要な場合には削除することができます。
JWT トークンを作成する
先ほど作成した Base64 署名付きハッシュを base64url.com に挿入して、署名を Base64URL に変換します。
Base64URL 署名付きハッシュの例:
AxE9qm4aTZiXvA2G8sblAxjeLhomy7lTQpcPCV6q_7asKyegL3305BcV_EUF950yOeJQqMBplzhP-pAKCiGS0oFLXjNZvUsifCpQCqJfRKFyxpnD8agtbB9UZLEhSEET3lKPSF1Y0Sqbcz1SkFafV0PZ9Hi3HepUtjXQ8zLUxMt-3cBnK9a5I4gc32fq9Pkgt-3Ysnw02SIzdiCyoQGiDDJA9CtJ3RNY1DnOEL6qB4PzwQSrHz8hyXdlotpHQ1Izgms8Sv62w3VKQJBRjnRLNVhszO4tg3YsvXpINEkL4KCKLOCDwLT1Y-Tj8LANn2fbU5XeuDGa43k1bwNXmDH78w
JWT トークン
これで、JWT トークンを完成させるための正しい形式の3つのコンポーネントがすべて揃いました。
JWT フォーマット:
JSON ウェブ トークンは、ドット ( . ) で区切られた 3 つの部分から構成されます。
Header.Payload.Signature (ヘッダー.ペイロード.署名)
Y = Base64URLEncode (ヘッダー) + '.'.+ Base64URLEncode (ペイロード) JWT token = Y + ‘.’+ Base64URLEncode(RSASHA256(Y))
JWTの例:
eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiYWRtaW4iOnRydWUsImlhdCI6MTUxNjIzOTAyMn0.AxE9qm4aTZiXvA2G8sblAxjeLhomy7lTQpcPCV6q_7asKyegL3305BcV_EUF950yOeJQqMBplzhP-pAKCiGS0oFLXjNZvUsifCpQCqJfRKFyxpnD8agtbB9UZLEhSEET3lKPSF1Y0Sqbcz1SkFafV0PZ9Hi3HepUtjXQ8zLUxMt-3cBnK9a5I4gc32fq9Pkgt-3Ysnw02SIzdiCyoQGiDDJA9CtJ3RNY1DnOEL6qB4PzwQSrHz8hyXdlotpHQ1Izgms8Sv62w3VKQJBRjnRLNVhszO4tg3YsvXpINEkL4KCKLOCDwLT1Y-Tj8LANn2fbU5XeuDGa43k1bwNXmDH78w
JWT を検証する
DigiCert® Software Trust Managerから、ハッシュの署名に使用した鍵ペアの公開鍵をダウンロードします。
jwt.io デバッガにアクセスします。
JWT トークンを [エンコード済み] ボックスに貼り付けます。
公開鍵を [署名の検証] ボックスに貼り付けます。すべてのステップが正しく完了すると、署名済み JWT の署名が検証されます。