Skip to content

Instantly share code, notes, and snippets.

@pinzolo
Last active January 24, 2021 03:46
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save pinzolo/baea91e9be320f166da594bd58342dfa to your computer and use it in GitHub Desktop.
Save pinzolo/baea91e9be320f166da594bd58342dfa to your computer and use it in GitHub Desktop.

JSON Web Signature (JWS) Unencoded Payload Option

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 拡張

3. The "b64" Header Parameter

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

4. Examples

4.1. Example with Header Parameters {"alg":"HS256"}

通常の JWS

4.2. Example with Header Parameters {"alg":"HS256","b64":false,"crit":["b64"]}

Detached-JWS の例

Compact Serialization ならペイロードは外部に存在するのでペイロード部分が空文字でピリオドが2つ続く

JSON Serialization なら payload の値が $.02 となる

5. Unencoded Payload Content Restrictions

エンコードされていない非分離型ペイロードに使用できる文字セットが2つのシリアライゼーションの間で異なるため、"b64 "の値 "false "を使用する一部のJWSは、JWS JSONシリアライゼーションとJWS Compactシリアライゼーションの間で構文的に変換できない。

5.1. Unencoded Detached Payload

RFC 7515 - JSON Web Signature (JWS): Appendix F. Detached Content の分離ペイロードを使用するときは JWS にペイロードが含まれないので JWS の解析には問題は無い。コンテンツに何らかのエンコードがなされる場合、署名時にエンコードされたコンテンツかエンコードされていないコンテンツかを指定しなければならない。

5.2. Unencoded JWS Compact Serialization Payload

non-detached な場合、例えばピリオドをペイロードに含めると JWS として解析できなくなる。

要するに使用される文字列に気をつけましょうということか

5.3. Unencoded JWS JSON Serialization Payload

JSON Serialization を使用するなら JSON で使用できる文字列であること

6. Using "crit" with "b64"

b64 を解釈できない実装によって処理されないように crit ヘッダーパラメータに b64 を含めなければならない

7. Intended Use by Applications

b64 が true の JWS を使用するならアプリケーションで一貫して使用されなければならない

b64 に true を指定するより b64 フィールドを使用しない方がおすすめ

JWT では b64 を使用してはならない。JWT では相互運用されるので解釈できない実装でも使用できるようにということだろう

8. Security Considerations

base64urlエンコードをしないので分離ペイロードじゃないときはアプリケーションが責任をもって使用できる文字だけで構成されていることを保証すること

b64: false を使用して crit フィールドに b64 を含めなかった場合、b64 を解釈できない実装によりペイロードが base64url デコードされるのでちゃんと crit に含めましょう

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment