3. JSON Web Token (JWT) Overview (JWT概要)
JWTは、JWSおよび/またはJWE構造にエンコードされたJSONオブジェクトとして、一連のクレーム (Claims) を表現します。このJSONオブジェクトがJWT Claims Set (JWTクレームセット) です。RFC 7159 [RFC7159] のセクション4によれば、JSONオブジェクトは0個以上の名前/値のペア (またはメンバー) で構成され、名前は文字列で、値は任意のJSON値です。これらのメンバーがJWTによって表現されるクレームです。RFC 7159 [RFC7159] のセクション2によれば、このJSONオブジェクトは、任意のJSON値または構造文字の前後に空白および/または改行を含むことができます (MAY)。
JWT Claims Set内のメンバー名はClaim Names (クレーム名) と呼ばれます。対応する値はClaim Values (クレーム値) と呼ばれます。
JOSE Headerの内容は、JWT Claims Setに適用される暗号化操作を記述します。JOSE HeaderがJWS用である場合、JWTはJWSとして表現され、クレームはデジタル署名またはMACされ、JWT Claims SetがJWS Payloadになります。JOSE HeaderがJWE用である場合、JWTはJWEとして表現され、クレームは暗号化され、JWT Claims SetがJWEによって暗号化される平文になります。JWTは別のJWEまたはJWS構造に囲まれてNested JWT (ネストされたJWT) を作成することができ (MAY)、ネストされた署名と暗号化を実行できます。
JWTは、ピリオド ('.') 文字で区切られたURL安全な部分のシーケンスとして表現されます。各部分にはbase64urlエンコードされた値が含まれます。JWT内の部分の数は、JWS Compact Serializationを使用して表現されたJWS、またはJWE Compact Serializationを使用して表現されたJWEの表現に依存します。
3.1. Example JWT (JWT例)
以下の例のJOSE Headerは、エンコードされたオブジェクトがJWTであり、JWTがHMAC SHA-256アルゴリズムを使用してMACされたJWSであることを宣言しています:
{"typ":"JWT",
"alg":"HS256"}
上記のJSONオブジェクトの表現における潜在的な曖昧さを取り除くために、この例で使用されているJOSE HeaderのUTF-8表現の実際のバイト列も以下に含まれています。(改行の異なるプラットフォーム表現 (CRLFとLF)、行の先頭と末尾の異なる間隔、最後の行に終端改行があるかどうか、その他の原因により、曖昧さが生じる可能性があることに注意してください。この例で使用される表現では、最初の行には先頭または末尾のスペースがなく、最初の行と2行目の間にCRLF改行 (13, 10) があり、2行目には1つの先頭スペース (32) があり末尾のスペースはなく、最後の行には終端改行がありません。)この例で使用されているJOSE HeaderのUTF-8表現のバイト列 (JSON配列表記を使用) は以下の通りです:
[123, 34, 116, 121, 112, 34, 58, 34, 74, 87, 84, 34, 44, 13, 10, 32,
34, 97, 108, 103, 34, 58, 34, 72, 83, 50, 53, 54, 34, 125]
JOSE HeaderのUTF-8表現のバイト列をBase64urlエンコードすると、次のエンコードされたJOSE Header値が得られます:
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
以下はJWT Claims Setの例です:
{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}
以下のバイト列は、この例で上記のJWT Claims Setに使用されているUTF-8表現であり、JWS Payloadです:
[123, 34, 105, 115, 115, 34, 58, 34, 106, 111, 101, 34, 44, 13, 10,
32, 34, 101, 120, 112, 34, 58, 49, 51, 48, 48, 56, 49, 57, 51, 56,
48, 44, 13, 10, 32, 34, 104, 116, 116, 112, 58, 47, 47, 101, 120, 97,
109, 112, 108, 101, 46, 99, 111, 109, 47, 105, 115, 95, 114, 111,
111, 116, 34, 58, 116, 114, 117, 101, 125]
JWS PayloadをBase64urlエンコードすると、次のエンコードされたJWS Payloadが得られます (表示目的でのみ改行を追加):
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly
9leGFtcGxlLmNvbS9pc19yb290Ijp0cnVlfQ
HMAC SHA-256アルゴリズムを使用してエンコードされたJOSE HeaderとエンコードされたJWS PayloadのMACを計算し、[JWS] で指定された方法でHMAC値をbase64urlエンコードすると、次のエンコードされたJWS Signatureが得られます:
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
これらのエンコードされた部分をこの順序で連結し、部分間にピリオド ('.') 文字を挿入すると、次の完全なJWTが得られます (表示目的でのみ改行を追加):
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
この計算は [JWS] の付録A.1でより詳細に説明されています。暗号化されたJWTの例については、付録A.1を参照してください。