[7] [[誰何]]や [[credentials]] における[[引数]]は [DFN[[CODE(ABNF)[[[auth-param]]]]]] と呼ばれています。 ;; [8] [[RFC 1945]] と [[RFC 2068]] では [[ABNF]] 構文上 [CODE(HTTP)@en[[[realm]]]] [[引数]]は [CODE(ABNF)@en[[[auth-param]]]] に含まれないことになっていました。 [[RFC 2069]] と [[RFC 2617]] では [CODE(HTTP)@en[[[realm]]]] も [CODE(ABNF)@en[[[auth-param]]]] の部分に含まれています。 * 仕様書 [REFS[ - [32] '''[CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) ''' - [39] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) - [42] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) - [50] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2012-03-04 10:51:49 +09:00]] 版) ]REFS] * 構文 [FIG[ [FIGCAPTION[ [34] [[RFC 2617]] における [CODE(ABNF)[[[auth-param]]]] の構文 ]FIGCAPTION] [PRE(ABNF code)[ auth-param = token "=" ( token | quoted-string ) ]PRE] ]FIG] ;; [FIG[ [FIGCAPTION[ [2] [[RFC 1945]] / [[RFC 2068]] における [CODE(ABNF)[[[auth-param]]]] の構文 ]FIGCAPTION] [PRE(ABNF code)[ auth-param = token "=" quoted-string ]PRE] ]FIG] ** 区切子 [6] [[MIME]] や [[HTTP]] の他の[[ヘッダー]]では[[引数]]は [CODE(char)[[[;]]]] で区切るのが普通ですが、 [[誰何]]や [[credentials]] では [CODE(char)[[[,]]]] で区切ります。 ;; [9] そのため [CODE(HTTP)@en[[[WWW-Authenticate:]]]] や [CODE(HTTP)@en[[[Proxy-Authenticate:]]]] や [CODE(HTTP)@en[[[Authorization:]]]] は[[HTTPヘッダーの連結]]の処理の際に注意が必要です。 ** 名前 [13] [[引数]]の名前は[[ASCII大文字・小文字不区別]]です。 ;; [14] [[RFC 1945]] / [[RFC 2068]] は [CODE(HTTP)@en[[[realm]]]] [[属性]]以外について[[大文字]]と[[小文字]]の解釈を明記していません。 [15] 同じ名前の[[引数]]を複数回使うことは認められていません。 ;; [16] [[RFC 1945]] / [[RFC 2068]] 仕様上はこれが明記されていません。 ** 値 [35] [[RFC 2617]] の定義では値は [[HTTP]] の [[token]] または [[quoted-string]] として指定することになっています。 ;; [22] [[RFC 1945]] と [[RFC 2068]] の定義では必ず [CODE(ABNF)@en[[[quoted-string]]]] とすることになっていましたが、 [[RFC 2069]] ではそうなっていない構文が定義されており、 矛盾していました。 [36] 更に、各[[引数]]について個別の値の構文が定義されています。例によって[[引数]]ごとの個別の [[ABNF]] 構文は [[quoted-string]] の[[引用符]]まで含めて特定の構文を決める形になっていますが、 現実にはまず [[token]] または [[quoted-string]] として構文解析した後にその値の部分を取り出して処理するのが一般的だと思われます。 ** OAuth 用の表現 [51] [[OAuth 1.0]] では[[プロトコル引数]]を [CODE(HTTP)@en[[Authorization:]]]] 欄で [[auth-param]] として指定することができ、その場合の構文が [[HTTP]] 本体よりも厳密に規定されています。 [SRC[>>50]] - [55] [[引数]]の名前と値はまず [[UTF-8]] で[[パーセント符号化]]しておきます。 - [52] [[引数]]の名前と値の間に [[LWS]] を入れることはできません。 - [53] [[引数]]の値は [[quoted-string]] としなければなりません。 - [54] [[引数]]の値で [[quoted-pair]] は使いません。 - [56] [[引数]]の区切りには [CODE(HTTP)[[[,]]]] と [CODE(charname)@en[[[SP]]]]、 または [CODE(HTTP)[[[,]]]] だけを使います。 * 順序 [12] 引数の順序は特に規定されていないようです。 ;; [11] [[RFC 1945]]/[[RFC 2068]] の定義では、 [[誰何]]においては [CODE(HTTP)@en[[[realm]]]] [[引数]]は唯一、 [CODE(HTTP)@en[[[auth-scheme]]]] に関わらず必須で構文的にも最初に定義されている特殊な[[引数]]でした。 ただ最初の[[引数]]でなければならないのが [[ABNF]] 構文の定義上のものなのか、 現実にそうでなければならない要件なのかははっきりしませんでした。 [20] [CODE(HTTP)@en[[[auth-param]]]] の順序に意味はありません。 ;; [21] [[RFC 1945]] / [[RFC 2068]] 仕様上はこれが明記されていません。 * 文脈 [17] [[誰何]]では、 [CODE(HTTP)@en[[[auth-scheme]]]] に続けて1つ以上指定し、 必要な[[認証]]についての追加情報を表します。 [18] [[credentials]] では、[[Basic認証]]以外の場合に [CODE(HTTP)@en[[[auth-scheme]]]] に続けて0個以上指定し、[[認証]]に必要な情報を表します。 * 未知の引数 [38] [[Digest認証]]では未知の[[引数]]は無視し[['''なければなりません''']] [SRC[>>39, >>42]]。 * 引数の一覧 [FIG[ - [59] [CODE(HTTP)@en[[[Credential]]]] ([CODE(HTTP)@en[[[AWS4-HMAC-SHA256]]]] [[誰何]]) - [60] [CODE(HTTP)@en[[[SignedHeaders]]]] ([CODE(HTTP)@en[[[AWS4-HMAC-SHA256]]]] [[誰何]]) - [61] [CODE(HTTP)@en[[[Signature]]]] ([CODE(HTTP)@en[[[AWS4-HMAC-SHA256]]]] [[誰何]]) - [27] [CODE(HTTP)@en[[[algorithm]]]] ([[Digest]] [[誰何]], [[credentials]]) - [58] [CODE(HTTP)@en[[[auth]]]] ([[GoogleLogin]] [[credentials]]) - [40] [CODE(HTTP)@en[[[cnonce]]]] ([[Digest]] [[credentials]]) - [31] [CODE(HTTP)@en[[[digest]]]] ([[Digest]] [[credentials]]) - [23] [CODE(HTTP)@en[[[domain]]]] ([[Digest]] [[誰何]]) - [62] [CODE(HTTP)@e[[[entity]]]] ([CODE(HTTP)@en[[[PEM]]]] [[credentials]]) - [41] [CODE(HTTP)@en[[[nc]]]] ([[Digest]] [[credentials]]) - [24] [CODE(HTTP)@en[[[nonce]]]] ([[Digest]] [[誰何]]) - [43] [CODE(HTTP)@en[[[oauth_consumer_key]]]] ([[OAuth]] [[credentials]]) - [48] [CODE(HTTP)@en[[[oauth_nonce]]]] ([[OAuth]] [[credentials]]) - [57] [CODE(HTTP)@en[[[oauth_problem]]]] ([[OAuth]] [[誰何]]) - [45] [CODE(HTTP)@en[[[oauth_signature_method]]]] ([[OAuth]] [[credentials]]) - [46] [CODE(HTTP)@en[[[oauth_signature]]]] ([[OAuth]] [[credentials]]) - [47] [CODE(HTTP)@en[[[oauth_timestamp]]]] ([[OAuth]] [[credentials]]) - [44] [CODE(HTTP)@en[[[oauth_token]]]] ([[OAuth]] [[credentials]]) - [49] [CODE(HTTP)@en[[[oauth_version]]]] ([[OAuth]] [[credentials]]) - [25] [CODE(HTTP)@en[[[opaque]]]] ([[Digest]] [[誰何]], [[credentials]]) - [37] [CODE(HTTP)@en[[[qop]]]] ([[Digest]] [[誰何]], [[credentials]]) - [30] [CODE(HTTP)@en[[[response]]]] ([[Digest]] [[credentials]]) - [26] [CODE(HTTP)@en[[[stale]]]] ([[Digest]] [[誰何]]) - [10] [CODE(HTTP)@en[[[realm]]]] ([[誰何]]) - [29] [CODE(HTTP)@en[[[uri]]]] ([[Digest]] [[credentials]]) - [28] [CODE(HTTP)@en[[[username]]]] ([[Digest]] [[credentials]]) ]FIG] * 歴史 ** RFC [REFS[ - [1] [CITE@en[RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0]] ([TIME[2012-02-18 23:25:56 +09:00]] 版) - [19] [CITE@en[RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1]] ([TIME[2012-02-18 23:30:14 +09:00]] 版) - [33] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) ]REFS]