/
631.txt
124 lines (87 loc) · 3.9 KB
/
631.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
[12]
[DFN[JWK集合]]は、 [[JWK]] をいくつか含められる [[JSON応用]]です。
* 仕様書
[REFS[
- [2]
[CITE@en[[[RFC 7517]]: JSON Web Key (JWK)]], [TIME[2022-11-25T08:37:32.000Z]] <https://www.rfc-editor.org/rfc/rfc7517.html#section-2>
- [5]
[CITE@en[[[RFC 7517]]: JSON Web Key (JWK)]], [TIME[2022-12-08T13:49:03.000Z]] <https://www.rfc-editor.org/rfc/rfc7517.html#section-5>
- [13]
[CITE[JSON Object Signing and Encryption ([[JOSE]])]], [TIME[2022-10-17T22:55:51.000Z]], [TIME[2022-12-08T14:04:20.274Z]] <https://www.iana.org/assignments/jose/jose.xhtml#web-key-set-parameters>
- [34]
[CITE@en[[[RFC 7517]]: JSON Web Key (JWK)]], [TIME[2022-12-15T11:45:52.000Z]] <https://www.rfc-editor.org/rfc/rfc7517.html#section-8.5.1>
]REFS]
* 構文
[35]
[CODE[application/jwe-set+json]]
では
[[RFC 3629]] [[UTF-8]]
[[符号化]]する[SHOULD[べき]]とされます。
[SRC[>>34]]
[36] なぜか[MUST[必須]]ではなく、他の[[文字符号化]]の余地が残されています。
[37]
[[暗号化JWK集合]]では [[RFC 3629]] [[UTF-8]] と定義されていて、他の選択肢は提供されていません。
* データモデル
[3]
[DFN[[RUBYB[JWK[RUBY[集][しゅう]][RUBY[合][ごう]]][JWK Set]]]]は、
[[JWK]] の[[集合]]を表す[[JSONオブジェクト]]です。
[SRC[>>2, >>5]]
[FIG(list members)[ [6] [[JSONオブジェクト]]
: [DFN[[F[[CODE[keys]]]]]] :
[MUST[必須]]。
[[JWK]] の[[配列]]でなければ[MUST[なりません]]。
[SRC[>>2, >>5]]
既定では [[JWK]] の順序は優先度を表しませんが、
[[応用]]次第で順序に意味を持たせることができます。
[SRC[>>5]]
]FIG]
;; [10] [CODE[keys]] の規定より、「JWK集合」は[[集合]]と称していますが、
順序が意味を持つことがある点に注意。
;; [11]
まったく同等の [[JWK]] を複数含められるのか不明ですが、
特に禁止されていないので可能と考えるべきでしょう。
;; [15] [[空]]の[[配列]] = 事実上[[空]]の [[JWK集合]]とできるのかは不明です。
禁止されていないので素直に読めば出来るということになります。
[27]
[[JWK集合]]にはその他の[[メンバー]]があるかもしれません。
実装は理解しない[[メンバー]]を無視しなければ[MUST[なりません]]。
[SRC[>>5]]
[28]
[[JWK集合]]の[[メンバー]]の名前は、
[[IANA登録簿]] [SRC[>>13]]
に登録された値か、
[[耐衝突名]]を含む値である[RUBYB[べき][should]]です。
[SRC[>>5]]
[14]
本段落執筆 (令和4年) 時点で、
[[IANA登録簿]]にあるのは [CODE[keys]] だけです [SRC[>>13]]。
[26]
[[メンバー]]の名前は、[[JWK集合]]内で固有でなければ[MUST[なりません]]。
[[JWK集合]][[構文解析器]]は、
[[JWK集合]]が[[メンバー]]名の重複を含む時、
これを拒絶するか、
または重複するメンバー名について字句的に最後のもののみ採用する
[[JavaScript]] [CODE[JSON.parse]]
と同じ挙動の [[JSON]] [[構文解析器]]を使うかしなければ[MUST[なりません]]。
[SRC[>>5]]
* 文脈
[1] [CODE[jku]] [[ヘッダー引数]]から参照されます。
[16] [[暗号化JWK集合]]としても使われます。
* MIME型
[FIG(data list middle)[ [32] [[MIME型]]
:[[MIME型]]:[DFN[[CODE[application/jwk-set+json]]]]
:説明:[[JWK]]
:[[CTE]]:[CODE[8bit]]
]FIG]
[33] [CODE[cty]] では省略されて [DFN[[CODE[jwk-set+json]]]]
と書かれます。
* 処理
[4]
実装は、
[[JWK集合]]中の [[JWK]] について、
- [7] [CODE[kty]] 値が理解できないもの
- [8] 必須のメンバーの欠けたるもの
- [9] 値が対応する範囲から外れているもの
... のいずれかを満たすならば、無視する[SHOULD[べきです]]。
[SRC[>>5]]
* メモ