/
432.txt
143 lines (104 loc) · 7.35 KB
/
432.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
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
[11] [DFN[[[credentials]]]] は、[[HTTP認証]]における[[認証]]のための[[利用者名]]や[[パスワード]]などの情報を記述したものです。
[CODE(HTTP)@en[[[Authorization:]]]] [[ヘッダー]]などで使われます。
* 仕様書
[REFS[
- [20] '''[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>'''
- [13] [CITE@en[RFC 7231 - Hypertext Transfer Protocol (HTTP/1.1): Semantics and Content]] ([TIME[2014-06-07 01:55:45 +09:00]] 版) <https://tools.ietf.org/html/rfc7231#section-5.4>
- [12] [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-5.1.2>
- [25] [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-6.2>
]REFS]
* 構文
[21] [CODE(HTTP)@en[[[credentials]]]] は、 [CODE(ABNF)@en[[[auth-scheme]]]]
のみか、その後に [CODE(ABNF)@en[[[auth-param]]]] の[[リスト]] ([CODE(HTTP)[#]])
または [CODE(ABNF)@en[[[token68]]]] を続けたものです。
[22] [CODE(ABNF)@en[[[auth-scheme]]]] の後に続く場合には
[CODE(ABNF)@en[[[auth-scheme]]]] の後に1文字以上の [CODE(charname)@en[[[SP]]]]
が必要です。
[FIG(railroad)[
= [CODE(ABNF)@en[[[auth-scheme]]]]
= ?
== +
=== [CODE(charname)@en[[[SP]]]]
== |
=== [CODE(ABNF)@en[[[auth-param]]]] の[[リスト]]
=== [CODE(ABNF)@en[[[token68]]]]
]FIG]
;; [2] [[RFC 1945]] や [[RFC 2068]] では、原則として [CODE(ABNF)@en[[[auth-param]]]]
の[[リスト]] ([CODE(HTTP)[#]]) ながらも、[[基本認証]]だけ特別な構文とされていました。
[[RFC 2617]] ではなぜか[[基本認証]]の場合が示されていませんでした。
[[RFC 7235]] で[[基本認証]]の場合が [CODE(ABNF)@en[[[token68]]]]
に置き換えられました。
;; [3] [[RFC 2617]] までは区切りの [CODE(ABNF)@en[[[SP]]]] が省略されていて、
[CODE(ABNF)@en[[[LWS]]]] が暗示的に挟まるとも明記されていませんでした。
[4] [CODE(ABNF)@en[[[auth-param]]]] や [CODE(ABNF)@en[[[token68]]]]
の部分は [CODE(ABNF)@en[[[auth-scheme]]]] によって異なる構文となります。
どの [CODE(ABNF)@en[[[auth-scheme]]]] でも共通して必須である[[引数]]はありません。
;; [23] 詳しくは [CODE(ABNF)@en[[[auth-scheme]]]] と各[[認証方式]]の項を参照。
[24] [CODE(ABNF)@en[[[token68]]]] は既存の[[認証方式]]の構文との互換性のためのもので、
新しい[[認証方式]]は使う[RUBYB[べきではありません]@en[ought to]] [SRC[>>22]]。
* authorization credentials
[14] 次の[[ヘッダー]]は、 [DFN[[[authorization credentials]]]] に分類されています [SRC[>>13]]。
[FIG(list short)[
- [CODE(HTTP)@en[[[Authorization:]]]]
- [CODE(HTTP)@en[[[Proxy-Authorization:]]]]
]FIG]
[15] [CODE(HTTP)@en[[[X-WSSE:]]]] もこの分類に含めるのが適当かもしれません。
[16] これに属する[[ヘッダー]]は、 [CODE(HTTP)@en[[[TRACE]]]]
に対する[[応答]]に含めるべきではないでしょう。
* 文脈
[7] [[credentials]] は [CODE(HTTP)@en[[[Authorization:]]]] [[ヘッダー]]や
[CODE(HTTP)@en[[[Proxy-Authorization:]]]] [[ヘッダー]]の値として使われます。
* 適用範囲と再利用
[5] [[利用者エージェント]]がある [[credentials]] を自動的に適用できる範囲は、
[[ホスト]]と [CODE(HTTP)@en[[[realm]]]] による保護空間により決まります。
当該 [[creadentials]] 付きの[[要求]]が一旦[[認証]]されれば、
それを同じ空間の別の[[要求]]に対しても、 [[auth-scheme]]、 [[auth-param]]、
あるいは[[利用者]]の設定によって決まる期間、再利用して構いません。 [SRC[>>1, >>8]]
[6] [[auth-scheme]] によって特に決められていない限り、
保護空間を[[鯖]]を超えて延長することはできません。 [SRC[>>1, >>8]]
[26] [[利用者エージェント]]による [[credentials]] の保存の期間を満了させたり、
破棄させたりする方法は [[HTTP]] としては規定されていませんが、
[[認証方式]]によってはそのような仕組みを規定することもできます。 [SRC[>>25]]
[27] [[利用者エージェント]]は保存されている[[利用者]]が [[credentials]]
を破棄できる仕組みを提供することを[RUBYB[推奨]@en[encourage]]されています [SRC[>>25]]。
[EG[
[28] 最近の [[Webブラウザー]]には[[パスワードマネージャー]]のような機能があり、
サイトごとの[[パスワード]]を個別に削除できます。
[29] また、一括またはサイトごとの[[パスワード]]を消去する機能を用意している
[[Webブラウザー]]や、終了時に消去する[[シークレットウィンドウ]]のような機能を用意している
[[Webブラウザー]]もあります。
]EG]
[30] 現在の [[Webブラウザー]]の一般的な実装では、ある[[保護空間]]に対する
[[Webブラウザー]]の[[セッション]]の初回 [CODE(HTTP)[[[401]]]] [[応答]]では保存されている[[パスワード]]を補完した入力[[ダイアログボックス]]を表示し、
以後のアクセスでは予め [[credentials]] を指定した[[要求]]を送信するようになっています。
[31] 自動的な [[credentials]] の送信をやめるよう[[著者]]が[[鯖]]側から指示する
「[[ログアウト]]」機能が度々提案されていますが、そのような機能が必要な場合は
[[Cookie認証]]が用いられることが多く、特に必要性は高く無いとして
[[Webブラウザー]]開発者等の関心は高くないのが実情のようです。
* 歴史
** RFC 第1世代
[REFS[
- [1] [CITE@en[RFC 1945 - Hypertext Transfer Protocol -- HTTP/1.0]] ([TIME[2012-02-18 23:25:56 +09:00]] 版) <http://tools.ietf.org/html/rfc1945#section-11>
]REFS]
** RFC 第2世代
[REFS[
- [8] [CITE@en[RFC 2068 - Hypertext Transfer Protocol -- HTTP/1.1]] ([TIME[2012-02-18 23:30:14 +09:00]] 版) <http://tools.ietf.org/html/rfc2068#section-11>
]REFS]
** RFC 第3世代
[REFS[
- [9] [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#page-4>
]REFS]
** RFC 第4世代
[REFS[
- [10] '''[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]
** Fetch
[17] [CITE@en[Re: ''''''[''''''whatwg'''''']'''''' '''['''Fetch spec''']''' Link to CORS FAQ wiki]]
( ([[Anne van Kesteren]] 著, [TIME[2014-08-15 19:09:25 +09:00]] 版))
<http://lists.w3.org/Archives/Public/public-whatwg-archive/2014Aug/0087.html>
[18] [CITE@en[Move credentials out of network or cache fetch since it ties in with COR... · 9014f52 · whatwg/fetch]]
( ([TIME[2014-09-13 00:35:09 +09:00]] 版))
<https://github.com/whatwg/fetch/commit/9014f52207bd12f9882ee929d13d3b39def02790>
[19] [CITE@en[Credential Management]]
( ([TIME[2014-09-06 15:49:34 +09:00]] 版))
<https://mikewest.github.io/credentialmanagement/spec/>