RFC 7797 - JSON Web Signature (JWS) Unencoded Payload Option
RFC 7797 - JSON Web Signature (JWS) Unencoded Payload Option 日本語訳
ペイロードが JWS の外にあって JWS に含める必要が無いとき RFC 7515 - JSON Web Signature (JWS): Appendix F. Detached Content や、すでにURLセーフのため base64url エンコードをする必要が無い場合にペイロードを base64url エンコードしない JWS を作成するための RFC7519 拡張
b64
ヘッダーパラメータは署名作成時にペイロードを base64url したかどうかの値。デフォルトは true
b64 |
JWS Signing Input Formula |
---|---|
true | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.' || BASE64URL(JWS Payload)) |
false | ASCII(BASE64URL(UTF8(JWS Protected Header)) || '.') || JWS Payload |
通常の JWS
Detached-JWS の例
Compact Serialization ならペイロードは外部に存在するのでペイロード部分が空文字でピリオドが2つ続く
JSON Serialization なら payload
の値が $.02
となる
エンコードされていない非分離型ペイロードに使用できる文字セットが2つのシリアライゼーションの間で異なるため、"b64 "の値 "false "を使用する一部のJWSは、JWS JSONシリアライゼーションとJWS Compactシリアライゼーションの間で構文的に変換できない。
RFC 7515 - JSON Web Signature (JWS): Appendix F. Detached Content の分離ペイロードを使用するときは JWS にペイロードが含まれないので JWS の解析には問題は無い。コンテンツに何らかのエンコードがなされる場合、署名時にエンコードされたコンテンツかエンコードされていないコンテンツかを指定しなければならない。
non-detached な場合、例えばピリオドをペイロードに含めると JWS として解析できなくなる。
要するに使用される文字列に気をつけましょうということか
JSON Serialization を使用するなら JSON で使用できる文字列であること
b64
を解釈できない実装によって処理されないように crit
ヘッダーパラメータに b64
を含めなければならない
b64
が true の JWS を使用するならアプリケーションで一貫して使用されなければならない
b64
に true を指定するより b64
フィールドを使用しない方がおすすめ
JWT では b64
を使用してはならない。JWT では相互運用されるので解釈できない実装でも使用できるようにということだろう
base64urlエンコードをしないので分離ペイロードじゃないときはアプリケーションが責任をもって使用できる文字だけで構成されていることを保証すること
b64: false
を使用して crit
フィールドに b64
を含めなかった場合、b64
を解釈できない実装によりペイロードが base64url デコードされるのでちゃんと crit
に含めましょう