A1

response 引数 (auth-param)

仕様書

意味

[5] 利用者が合言葉を知っていることを示すものです >>3。

構文

[4] 十六進数字列です >>3。

[7] 字句ではなく引用文字列を生成しなければなりません >>3。

値の算出

[8] response 引数の値は、 qop 引数の値が auth や auth-int の時、次の通り定義されています >>3。

  1. [11] nonce、nc、cnonce、qop を、それぞれ同名の引数の値 (引用文字列は、その表す値) に設定します。
  2. [10] 値を、 nonce、:、nc、 :、cnonce、:、qop、 :、H (A2) を連結した値に設定します。
  3. [9] KD ( H (A1), 値 ) の結果を返します。

[42] 実際には、それを更に十六進数の小文字に変換したものが使われるようです。

[43] RFC 7616 にはなぜか明確な説明はありません。例示はありますが... RFC 2617 時代は ABNF 構文で曖昧に暗示されていました >>1 が、 RFC 7616 はなぜかそれすら含めていません。

[13] A1 は、次のように定義されています >>3。

  1. [14] アルゴリズムを、 algorithm 引数の値に設定します。
  2. [16] 利用者名を、 username 引数の値 (引用文字列の表す値) に設定します。 ただし、 userhash 引数の指定に従いハッシュ化する場合でも、 ハッシュ化前の値を用います。
  3. [19] realm を、 realm 引数の値 (引用文字列の表す値) に設定します。
  4. [17] 合言葉を、適切な合言葉に設定します。
  5. [15] アルゴリズムが -sess で終わらないものなら、
    1. [18] 利用者名、:、realm、:、合言葉 を連結した値を返します。
  6. [20] それ以外なら、
    1. [21] 値を、 利用者名、:、realm、 :、合言葉を連結したものに設定します。
    2. [23] nonce-prime を、 challenge の nonce 引数の値 (引用文字列の表す値) に設定します。
    3. [24] cnonce-prime を、 credentials の cnonce 引数の値 (引用文字列の表す値) に設定します。
    4. [22] H (値)、:、 nonce-prime、:、cnonce-prime を連結したものを返します。
[40] 利用者名の文字コードは、 charset 引数の指定に従います >>41。

[25] A2 は、次のように定義されています >>3。

  1. [31] メソッドを、要求のメソッドに設定します。
  2. [32] 要求対象を、要求の要求対象に設定します。
  3. [35] credentials に uri="" 引数があって、 値が要求対象と同じ資源を表していなければ、
    1. [37] 攻撃かもしれませんから、記録して構いません。
    2. [36] 400 応答を返すべきです。
  4. [33] 実体本体を、要求の payload body に設定します。
  5. [26] qop を、 qop 引数の値に設定します。
  6. [27] qop が auth か未指定なら、
    1. [28] メソッド、:、要求対象を連結したものを返します。
  7. [29] qop が auth-int なら、
    1. [30] メソッド、:、要求対象、 :、H (実体本体) を連結したものを返します。
[38] 要求対象と uri="" の比較の方法は明確ではありません。 単純に要求URLと指定された値の比較で良いのか、 サーバー依存の比較で良いのか不明です。プロキシによる改竄 (意図的にせよそうでないにせよ。) を防ぐのが目的の検査ですから、 厳し目の方が良いのかもしれません。 (要求対象直接の比較ではなく実効要求URLと比較するべきと思われますが、 RFC はそれすら明確にしていません。)
[12] H () と KD () は、 ハッシュアルゴリズムに依存して決まる関数です。
[39] rspauth 引数の A2 と微妙に違います。

文脈

[6] ダイジェスト認証の credentials の auth-param として使うことができます >>3。

歴史

[34] RFC 7616 は値の定義で request-uri を使っていますが、 その意味は規定していません。 request-target の意味は規定されていますが、 使われていません。前の版の RFC 2617 では request-uri の意味が定義されていて、それに相当する部分が RFC 7616 では request-target に差し替わっています。これは RFC 723x における用語の変更に追随しようとして、中途半端になっているようです。

現時点でRFC Errataに報告はないみたいです。