Skip to main content

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 を作成するには:

  1. JWT.io デバッガにアクセスします。

  2. ヘッダーセクションにアルゴリズムとトークンタイプを入力します。クレームを追加することも可能です。

  3. ペイロードセクションにユーザー情報を入力する:

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 を検証する

  1. DigiCert​​®​​ Software Trust Managerから、ハッシュの署名に使用した鍵ペアの公開鍵をダウンロードします。

  2. jwt.io デバッガにアクセスします。

  3. JWT トークンを [エンコード済み] ボックスに貼り付けます。

  4. 公開鍵を [署名の検証] ボックスに貼り付けます。すべてのステップが正しく完了すると、署名済み JWT の署名が検証されます。