response

response 引数 (auth-param)

仕様書

意味

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

構文

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

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

値の算出

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

  1. [11] noncenccnonceqop を、それぞれ同名の引数の値 (引用文字列は、その表す値) に設定します。
  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 を、 challengenonce 引数の値 (引用文字列の表す値) に設定します。
    3. [24] cnonce-prime を、 credentialscnonce 引数の値 (引用文字列の表す値) に設定します。
    4. [22] H ():nonce-prime:cnonce-prime を連結したものを返します。
[40] 利用者名文字コードは、 charset 引数の指定に従います >>41

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

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

文脈

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

歴史

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

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