3. JSON Web Signature (JWS) Overview (JWS概要)
JWSは、JSONデータ構造とbase64urlエンコーディングを使用して、デジタル署名またはMACで保護されたコンテンツを表現します。これらのJSONデータ構造は、RFC 7159 [RFC7159] のセクション2の規定に従って、JSON値または構造文字の前後に空白および/または改行を含めてもよい (MAY) です。JWSは、以下の論理値を表現します(各値はセクション2で定義されています):
- JOSE Header (JOSEヘッダー)
- JWS Payload (JWSペイロード)
- JWS Signature (JWS署名)
JWSの場合、JOSE Headerのメンバーは、以下の値のメンバーの和集合です(各値はセクション2で定義されています):
- JWS Protected Header (JWS保護ヘッダー)
- JWS Unprotected Header (JWS非保護ヘッダー)
本文書では、JWSに対して2つのシリアライゼーション方式を定義しています: JWS Compact Serialization (JWSコンパクトシリアライゼーション) と呼ばれるコンパクトでURLセーフなシリアライゼーション、およびJWS JSON Serialization (JWS JSONシリアライゼーション) と呼ばれるJSONシリアライゼーションです。これら両方のシリアライゼーションでは、JWS Protected Header、JWS Payload、およびJWS Signatureがbase64urlエンコードされます。これは、JSONには任意のオクテット列を直接表現する方法がないためです。
3.1 JWS Compact Serialization Overview (JWSコンパクトシリアライゼーション概要)
JWS Compact Serializationでは、JWS Unprotected Headerは使用されません。この場合、JOSE HeaderとJWS Protected Headerは同じです。
JWS Compact Serializationでは、JWSは以下の連結として表現されます:
BASE64URL(UTF8(JWS Protected Header)) || '.' ||
BASE64URL(JWS Payload) || '.' ||
BASE64URL(JWS Signature)
JWS Compact Serializationの詳細については、セクション7.1を参照してください。
3.2 JWS JSON Serialization Overview (JWS JSONシリアライゼーション概要)
JWS JSON Serializationでは、JWS Protected HeaderとJWS Unprotected Headerのいずれかまたは両方が存在しなければなりません (MUST)。この場合、JOSE Headerのメンバーは、存在するJWS Protected HeaderとJWS Unprotected Header値のメンバーの和集合です。
JWS JSON Serializationでは、JWSは以下の4つのメンバーの一部またはすべてを含むJSONオブジェクトとして表現されます:
- "protected", 値は BASE64URL(UTF8(JWS Protected Header))
- "header", 値は JWS Unprotected Header
- "payload", 値は BASE64URL(JWS Payload)
- "signature", 値は BASE64URL(JWS Signature)
これら3つのbase64urlエンコードされた結果文字列とJWS Unprotected Header値は、JSONオブジェクトのメンバーとして表現されます。これらの値のいくつかを含めることは任意 (OPTIONAL) です。JWS JSON Serializationは、1つだけでなく、複数の署名および/またはMAC値を表現することもできます。JWS JSON Serializationの詳細については、セクション7.2を参照してください。
3.3 Example JWS (JWSの例)
本セクションでは、JWSの例を示します。その計算は付録A.1でより詳細に説明されており、表現に使用されるJSON値の正確なオクテット列と使用される鍵値が指定されています。
以下のJWS Protected Headerの例では、エンコードされたオブジェクトがJSON Web Token [JWT] であり、JWS Protected HeaderとJWS PayloadがHMAC SHA-256 [RFC2104] [SHS] アルゴリズムで保護されていることを宣言しています:
{"typ":"JWT",
"alg":"HS256"}
このJWS Protected HeaderをBASE64URL(UTF8(JWS Protected Header))としてエンコードすると、次の値が得られます:
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
以下のJSONオブジェクトのUTF-8表現がJWS Payloadとして使用されます。(ペイロードは任意の内容であり、JSONオブジェクトの表現である必要はないことに注意してください。)
{"iss":"joe",
"exp":1300819380,
"http://example.com/is_root":true}
このJWS PayloadをBASE64URL(JWS Payload)としてエンコードすると、次の値が得られます(表示目的で改行を追加しています):
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
HMAC SHA-256アルゴリズムとJWS Signing Inputに対してASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload))およびHMACキーを使用してJWS Signatureを計算すると、次の値が得られます:
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
これらの値を使用してJWS Compact Serializationをエンコードすると、次の完全なJWSが得られます(表示目的で改行を追加しています):
eyJ0eXAiOiJKV1QiLA0KICJhbGciOiJIUzI1NiJ9
.
eyJpc3MiOiJqb2UiLA0KICJleHAiOjEzMDA4MTkzODAsDQogImh0dHA6Ly9leGFt
cGxlLmNvbS9pc19yb290Ijp0cnVlfQ
.
dBjftJeZ4CVP-mB92K27uhbUJU1p1r_wW1gFWFOEjXk
その他のJWSの例については、付録Aを参照してください。