<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="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <dfn><code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">token68</anchor></code></dfn> は、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</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>です。</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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="en">RFC 7235 - Hypertext Transfer Protocol (HTTP/1.1): Authentication</cite> (<time>2014-09-11 10:01:28 +09:00</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://tools.ietf.org/html/rfc7235#section-2.1">https://tools.ietf.org/html/rfc7235#section-2.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="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <code class="ABNF" xml:lang="en">token68</code> は、1文字<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">以上</anchor>の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCIIアルファベット</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ASCII数字</anchor>、<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code>、<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">.</anchor></code>、<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code>、
<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">~</anchor></code>、<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">+</anchor></code>、<code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/</anchor></code> の列です。
また末尾に任意の個数の <code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src></p><figure class="railroad"><ol><li>+<ol><li>|<ol><li><code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ALPHA</anchor></code></li><li><code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DIGIT</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">-</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">.</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">_</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">~</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">+</anchor></code></li><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">/</anchor></code></li></ol></li></ol></li><li>*<ol><li><code class="char"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">=</anchor></code></li></ol></li></ol></figure><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="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> <code>token68</code> 文字の一覧
<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://chars.suikawiki.org/set/%24rfc7235%3Atoken68-char">https://chars.suikawiki.org/set/%24rfc7235%3Atoken68-char</anchor-external></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> <code>token68</code> と <code>token</code> との文字の比較
<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://chars.suikawiki.org/set/compare?expr=%24rfc7230%3Atchar&amp;expr=%24rfc7235%3Atoken68-char">https://chars.suikawiki.org/set/compare?expr=%24rfc7230%3Atchar&amp;expr=%24rfc7235%3Atoken68-char</anchor-external></li></ul></refs><history xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><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> <code>token68</code> の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>種と構文は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 3986</anchor> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">URI</anchor> における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">非予約文字</anchor>、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">base64url</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base32</anchor>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base16</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="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">&gt;&gt;1</anchor-internal></src>。</p></history><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="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 「token68」という名称は68種類の文字が使えることに由来すると思われます。
この68個には末尾の <code xmlns="http://www.w3.org/1999/xhtml">=</code> は入っておらず、総計69種類の文字が使えます。
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor> も64種類の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字母</anchor>ですが、この数に <code xmlns="http://www.w3.org/1999/xhtml">=</code> は入っていません。)</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="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> <code xmlns="http://www.w3.org/1999/xhtml">%</code> が含まれていないので、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">パーセント符号化</anchor>した<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字列</anchor>は使えないので注意。</comment-p><p><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> 長さの上限は設定されていません。</p><p><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> 現実には実装による何らかの上限が存在すると思っておくべきです。
しかし実装は上限を十分大きな値にするべきでしょう。</p><example xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"><p xmlns="http://www.w3.org/1999/xhtml"><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> <code>Bearer</code> においては数百文字の列が使われることがあります。</p></example></section><section><h1>文脈</h1><p><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> <code class="ABNF" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">challenge</anchor></code> 
と
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">credentials</anchor> で使われています。
これらは
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP認証</anchor>に使われる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">プロトコル要素</anchor>で、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPクライアント</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP要求</anchor>に含める認証情報や、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPサーバー</anchor>が<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP応答</anchor>に含める認証情報の記述に使われることがあります。
具体的な構文は、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">auth-scheme</anchor>
に依存します。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>auth-scheme</anchor> </sw-see></p><p><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:">HTTP認証</anchor>の最近の仕様は、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>を使った構文を認めながらも、
新しい認証方式には非推奨とし、 <code>auth-param</code>
を使うことを求めています。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>challenge</anchor>, <anchor>credentials</anchor> </sw-see>
とはいえ、
古くから最もよく使われる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">認証方式</anchor>であるところの
<code>Basic</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基本認証</anchor>)
は
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">credentials</anchor> にこの形式を使っています。
比較的新しく近年よく使われる
<code>Bearer</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OAuth 2.0</anchor>)
も
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">credentials</anchor> にこの形式を使っています。
複雑な 
<code>auth-param</code>
よりも簡易的で<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:">字句68</anchor>構文が、
この先使われなくなるとは考えにくく、今後の新しい<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">認証方式</anchor>が
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP</anchor> 仕様を無視して<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>
構文を採用する可能性は十分あるでしょう。</p><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> 
<code>Basic</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">基本認証</anchor>)
では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">利用者名</anchor>、<code>:</code>、<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">合言葉</anchor>を連結してから
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor>
で<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化</anchor>したものが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>
に当たります。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>で認められる文字のうち、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Base64</anchor>
で使わない文字は含まれることがありません。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>Basic</anchor> </sw-see></p><p><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> 
<code>Bearer</code> (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OAuth 2.0</anchor>)
では、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>に当たるものは発行元 (<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">OAuthサービス提供者</anchor>側)
が任意に決定できる<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">不透明</anchor>な文字列です。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">字句68</anchor>の構文上の制約にさえ従っていれば、
どんな文字列を作成しても構いません。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTPクライアント</anchor>はこの文字列を解釈することはできず、
発行元に与えられたものをそのまま素通ししてサーバーに引き渡すことが求められています。
<sw-see xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:"> <anchor>Bearer</anchor> </sw-see></p><hr></hr><p><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 class="HTTP" xml:lang="en"><anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">HTTP2-Settings:</anchor></code> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ヘッダー</anchor>で使われています。</p></section><section><h1>関連</h1><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> 名前のよく似た <code>token</code> とは無関係です。</p></section><section><h1>歴史</h1><p><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> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 2616</anchor> 世代まではこれに相当するものはありませんでしたが、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">RFC 7235</anchor> で導入されました。</p></section></body></html>