<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> 
<dfn>JWK集合</dfn>は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> をいくつか含められる <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON応用</anchor>です。</p><section><h1>仕様書</h1><refs xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><ul xmlns="http://www.w3.org/1999/xhtml"><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> 
<cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7517</anchor>: JSON Web Key (JWK)</cite>, <time>2022-11-25T08:37:32.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/rfc/rfc7517.html#section-2">https://www.rfc-editor.org/rfc/rfc7517.html#section-2</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> 
<cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7517</anchor>: JSON Web Key (JWK)</cite>, <time>2022-12-08T13:49:03.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/rfc/rfc7517.html#section-5">https://www.rfc-editor.org/rfc/rfc7517.html#section-5</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<cite>JSON Object Signing and Encryption (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JOSE</anchor>)</cite>, <time>2022-10-17T22:55:51.000Z</time>, <time>2022-12-08T14:04:20.274Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.iana.org/assignments/jose/jose.xhtml#web-key-set-parameters">https://www.iana.org/assignments/jose/jose.xhtml#web-key-set-parameters</anchor-external></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[34]</anchor-end> 
<cite xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7517</anchor>: JSON Web Key (JWK)</cite>, <time>2022-12-15T11:45:52.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.rfc-editor.org/rfc/rfc7517.html#section-8.5.1">https://www.rfc-editor.org/rfc/rfc7517.html#section-8.5.1</anchor-external></li></ul></refs></section><section><h1>構文</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="35" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[35]</anchor-end> 
<code>application/jwe-set+json</code>
では
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3629</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor>
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>する<SHOULD xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき</SHOULD>とされます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="34" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;34</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="36" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[36]</anchor-end> なぜか<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">必須</MUST>ではなく、他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字符号化</anchor>の余地が残されています。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="37" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[37]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化JWK集合</anchor>では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3629</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-8</anchor> と定義されていて、他の選択肢は提供されていません。</p></section><section><h1>データモデル</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> 
<dfn><rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK<ruby xmlns="http://www.w3.org/1999/xhtml">集<rt>しゅう</rt></ruby><ruby xmlns="http://www.w3.org/1999/xhtml">合<rt>ごう</rt></ruby><rt xmlns="http://www.w3.org/1999/xhtml">JWK Set</rt></rubyb></dfn>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>を表す<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSONオブジェクト</anchor>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></p><figure class="list members"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSONオブジェクト</anchor></figcaption><dl><dt><dfn><f xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><code xmlns="http://www.w3.org/1999/xhtml">keys</code></f></dfn></dt><dd>
<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">必須</MUST>。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor>でなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;2</anchor-internal>, <anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src>
既定では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> の順序は優先度を表しませんが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">応用</anchor>次第で順序に意味を持たせることができます。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></dd></dl></figure><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml">keys</code> の規定より、「JWK集合」は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">集合</anchor>と称していますが、
順序が意味を持つことがある点に注意。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end>
まったく同等の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> を複数含められるのか不明ですが、
特に禁止されていないので可能と考えるべきでしょう。</comment-p><comment-p xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">配列</anchor> = 事実上<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">空</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>とできるのかは不明です。
禁止されていないので素直に読めば出来るということになります。</comment-p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="27" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[27]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>にはその他の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor>があるかもしれません。
実装は理解しない<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor>を無視しなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="28" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[28]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor>の名前は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IANA登録簿</anchor> <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src>
に登録された値か、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">耐衝突名</anchor>を含む値である<rubyb xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べき<rt xmlns="http://www.w3.org/1999/xhtml">should</rt></rubyb>です。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
本段落執筆 (令和4年) 時点で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">IANA登録簿</anchor>にあるのは <code>keys</code> だけです <src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;13</anchor-internal></src>。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="26" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[26]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor>の名前は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>内で固有でなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文解析器</anchor>は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">メンバー</anchor>名の重複を含む時、
これを拒絶するか、
または重複するメンバー名について字句的に最後のもののみ採用する
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JavaScript</anchor> <code>JSON.parse</code>
と同じ挙動の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JSON</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">構文解析器</anchor>を使うかしなければ<MUST xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">なりません</MUST>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></p></section><section><h1>文脈</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <code>jku</code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー引数</anchor>から参照されます。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">暗号化JWK集合</anchor>としても使われます。</p></section><section><h1>MIME型</h1><figure class="data list middle"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="32" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[32]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor></figcaption><dl><dt><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">MIME型</anchor></dt><dd><dfn><code>application/jwk-set+json</code></dfn></dd><dt>説明</dt><dd><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor></dd><dt><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CTE</anchor></dt><dd><code>8bit</code></dd></dl></figure><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="33" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[33]</anchor-end> <code>cty</code> では省略されて <dfn><code>jwk-set+json</code></dfn>
と書かれます。</p></section><section><h1>処理</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> 
実装は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK集合</anchor>中の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JWK</anchor> について、</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <code>kty</code> 値が理解できないもの</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 必須のメンバーの欠けたるもの</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> 値が対応する範囲から外れているもの</li></ul><p>... のいずれかを満たすならば、無視する<SHOULD xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">べきです</SHOULD>。
<src xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:"><anchor-internal xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;5</anchor-internal></src></p></section><section><h1>メモ</h1></section></body></html>