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