-
Notifications
You must be signed in to change notification settings - Fork 4
/
447.txt
105 lines (84 loc) · 5.79 KB
/
447.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
* 仕様書
[REFS[
- [3] [CITE@en[RFC 7616 - HTTP Digest Access Authentication]] ([TIME[2015-11-10 07:05:08 +09:00]] 版) <https://tools.ietf.org/html/rfc7616#section-3.4>
]REFS]
* 意味
[5] [[利用者]]が[[合言葉]]を知っていることを示すものです [SRC[>>3]]。
* 構文
[4] [[十六進数字]]列です [SRC[>>3]]。
[7] [[字句]]ではなく[[引用文字列]]を[[生成]]しなければ[['''なりません''']] [SRC[>>3]]。
* 値の算出
[8] [CODE(HTTP)@en[[[response]]]] [[引数]]の値は、
[CODE(HTTP)@en[[[qop]]]] [[引数]]の値が [CODE[[[auth]]]] や
[CODE[[[auth-int]]]] の時、次の通り定義されています [SRC[>>3]]。
[FIG(steps)[
= [11] [VAR[[[nonce]]]]、[VAR[[[nc]]]]、[VAR[[[cnonce]]]]、[VAR[[[qop]]]]
を、それぞれ同名の[[引数]]の値 ([[引用文字列]]は、その表す値) に設定します。
= [10] [VAR[値]]を、 [VAR[[[nonce]]]]、[CODE[[[:]]]]、[VAR[[[nc]]]]、
[CODE[[[:]]]]、[VAR[[[cnonce]]]]、[CODE[[[:]]]]、[VAR[[[qop]]]]、
[CODE[[[:]]]]、[VAR[[[H]]]] ([VAR[[[A2]]]]) を連結した値に設定します。
= [9] [VAR[[[KD]]]] ( [VAR[[[H]]]] ([VAR[[[A1]]]]), [VAR[値]] ) の結果を返します。
]FIG]
[13] [DFN[[VAR[[[A1]]]]]] は、次のように定義されています [SRC[>>3]]。
[FIG(steps)[
= [14] [VAR[アルゴリズム]]を、 [CODE(HTTP)@en[[[algorithm]]]]
[[引数]]の値に設定します。
= [16] [VAR[利用者名]]を、 [CODE(HTTP)@en[[[username]]]] [[引数]]の値
([[引用文字列]]の表す値) に設定します。
ただし、 [CODE[[[userhash]]]] [[引数]]の指定に従い[[ハッシュ化]]する場合でも、
[[ハッシュ化]]前の値を用います。
= [19] [VAR[realm]] を、 [CODE(HTTP)@en[[[realm]]]] [[引数]]の値
([[引用文字列]]の表す値) に設定します。
= [17] [VAR[合言葉]]を、適切な[[合言葉]]に設定します。
= [15] [VAR[アルゴリズム]]が [CODE[[[-sess]]]] で終わらないものなら、
== [18] [VAR[利用者名]]、[CODE[[[:]]]]、[VAR[realm]]、[CODE[[[:]]]]、[VAR[合言葉]]
を連結した値を返します。
= [20] それ以外なら、
== [21] [VAR[値]]を、 [VAR[利用者名]]、[CODE[[[:]]]]、[VAR[realm]]、
[CODE[[[:]]]]、[VAR[合言葉]]を連結したものに設定します。
== [23] [VAR[nonce-prime]] を、 [[challenge]] の [CODE(HTTP)@en[[[nonce]]]]
[[引数]]の値 ([[引用文字列]]の表す値) に設定します。
== [24] [VAR[cnonce-prime]] を、 [[credentials]] の [CODE(HTTP)@en[[[cnonce]]]]
[[引数]]の値 ([[引用文字列]]の表す値) に設定します。
== [22] [CODE[[VAR[[[H]]]] ([VAR[値]])]]、[CODE[[[:]]]]、
[VAR[nonce-prime]]、[CODE[[[:]]]]、[VAR[cnonce-prime]] を連結したものを返します。
]FIG]
[25] [DFN[[VAR[A2]]]] は、次のように定義されています [SRC[>>3]]。
[FIG(steps)[
= [31] [VAR[メソッド]]を、[[要求]]の[F[[[メソッド]]]]に設定します。
= [32] [VAR[要求対象]]を、[[要求]]の[F[[[要求対象]]]]に設定します。
= [35] [[credentials]] に [CODE[[[uri=""]]]] [[引数]]があって、
値が[VAR[要求対象]]と同じ[[資源]]を表していなければ、
== [37] 攻撃かもしれませんから、[[記録]]して構いません。
== [36] [CODE[[[400]]]] [[応答]]を返す[['''べきです''']]。
= [33] [VAR[実体本体]]を、[[要求]]の [F[[[payload body]]]] に設定します。
= [26] [VAR[[[qop]]]] を、 [CODE(HTTP)@en[[[qop]]]] [[引数]]の値に設定します。
= [27] [VAR[qop]] が [CODE[[[auth]]]] か未指定なら、
== [28] [VAR[メソッド]]、[CODE[[[:]]]]、[VAR[要求対象]]を連結したものを返します。
= [29] [VAR[qop]] が [CODE[[[auth-int]]]] なら、
== [30] [VAR[メソッド]]、[CODE[[[:]]]]、[VAR[要求対象]]、
[CODE[[[:]]]]、[CODE[[VAR[[[H]]]] ([VAR[実体本体]])]] を連結したものを返します。
]FIG]
;; [38] [[要求対象]]と [CODE[[[uri=""]]]] の比較の方法は明確ではありません。
単純に[[要求URL]]と指定された値の比較で良いのか、
[[サーバー]]依存の比較で良いのか不明です。[[プロキシ]]による[[改竄]]
(意図的にせよそうでないにせよ。) を防ぐのが目的の検査ですから、
厳し目の方が良いのかもしれません。
([[要求対象]]直接の比較ではなく[[実効要求URL]]と比較するべきと思われますが、
[[RFC]] はそれすら明確にしていません。)
;; [12] [CODE[[VAR[[[H]]]] ()]] と [CODE[[VAR[[[KD]]]] ()]] は、
[[ハッシュアルゴリズム]]に依存して決まる[[関数]]です。
* 文脈
[6] [[ダイジェスト認証]]の [[credentials]] の [CODE(ABNF)@en[[[auth-param]]]] として使うことができます [SRC[>>3]]。
* 歴史
[REFS[
- [2] [CITE@en[RFC 2069 - An Extension to HTTP : Digest Access Authentication]] ([TIME[2012-02-26 10:05:21 +09:00]] 版) <http://tools.ietf.org/html/rfc2069#section-2.1.2>
- [1] [CITE@en[RFC 2617 - HTTP Authentication: Basic and Digest Access Authentication]] ([TIME[2012-01-09 21:04:30 +09:00]] 版) <http://tools.ietf.org/html/rfc2617#section-3.2.2>
]REFS]
[34] [[RFC 7616]] は値の定義で [CODE[[[request-uri]]]] を使っていますが、
その意味は規定していません。 [CODE[[[request-target]]]] の意味は規定されていますが、
使われていません。前の版の [[RFC 2617]] では [CODE[[[request-uri]]]]
の意味が定義されていて、それに相当する部分が [[RFC 7616]] では
[CODE[[[request-target]]]] に差し替わっています。これは [[RFC 723x]]
における用語の変更に追随しようとして、中途半端になっているようです。
;; 現時点で[[RFC Errata]]に報告はないみたいです。 [TIME[2015-12-30T14:46:36.400Z]]