メインコンテンツまでスキップ

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を参照してください。