-
Notifications
You must be signed in to change notification settings - Fork 4
/
188.txt
293 lines (222 loc) · 14.2 KB
/
188.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
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
[4] [DFN@en[[CODE(ABNF)@en[[[auth-scheme]]]]]] は、 [[HTTP]] や派生プロトコルにおいて[[認証]]に用いる仕組み、あるいは仕組みを表す[[文字列]]です。
* 仕様書
[REFS[
- [15] '''[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>'''
- [17] [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>
-- [19] [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>
- [18] [CITE[Hypertext Transfer Protocol (HTTP) Authentication Scheme Registry]] ([TIME[2014-06-11 22:15:35 +09:00]] 版) <http://www.iana.org/assignments/http-authschemes/http-authschemes.xhtml>
- [22] [CITE@en[RFC 7230 - Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing]] ([TIME[2014-10-20 22:50:36 +09:00]] 版) <https://tools.ietf.org/html/rfc7230#section-2.3>
- [31] [CITE@en[RFC 2326 - Real Time Streaming Protocol (RTSP)]] ([TIME[2014-10-19 05:24:58 +09:00]] 版) <https://tools.ietf.org/html/rfc2326#page-75>
]REFS]
* 構文
[9] [CODE(ABNF)@en[[[auth-scheme]]]] は [[HTTP]] の [CODE(ABNF)@en[[[token]]]] とされています [SRC[>>7, >>11, >>13, >>15]]。
[FIG(railroad)[
= [[字句]]
]FIG]
[10] [CODE(HTTP)@en[[[auth-scheme]]]] は[[大文字・小文字不区別]]です [SRC[>>7, >>11, >>13, >>15]]。
[53] 現実には、特定の[[大文字]]・[[小文字]]の組み合わせしか受け付けない杜撰な実装もあります。
[EG[
[54] [[BitBucket]] の [[Web API]] サーバーは、 [CODE[Bearer]] は認識しますが、
[CODE['''b'''earer]] は認識しません。 [TIME[2017-09-08T08:24:35.00Z]]
]EG]
-*-*-
[25] [CODE(ABNF)@en[[[auth-scheme]]]] が使われる [[challenge]] や [[credentials]]
では、 [CODE(ABNF)@en[[[auth-param]]]] の[[リスト]] ([CODE(HTTP)[#]])
または [CODE(ABNF)@en[[[token68]]]] を添えて指定できます。これらは
[[chalenge]] や [[credentials]] における [CODE(ABNF)@en[[[auth-scheme]]]]
依存の追加情報を表しています。
[EG[
[26] 例えば[[基本認証]]の [[challenge]] では[[利用者名]]と[[合言葉]]を指定します。
]EG]
[27] 各 [CODE(ABNF)@en[[[auth-scheme]]]] におけるこれらの値の構文と処理方法については、
それぞれの項および [CODE(ABNF)@en[[[auth-param]]]] を参照してください。
* 文脈
[8] [CODE(ABNF)@en[[[auth-scheme]]]] の値は、 [[HTTP]] の [[challenge]]、
[[credentials]] の中で[[認証]]の方式を表すために使われます。
[5] [CODE(ABNF)@en[[[auth-scheme]]]] の値は、 [[CGI]] の[[メタ変数]]
[CODE(CGI)@en[[[AUTH_TYPE]]]] の値としても使われます。
[28] [[認証方式]]は一般に[[起源鯖]]での認証にも[[串]]での認証にも使えます。
各[[認証方式]]はそれぞれの場面で使えるかを明記する必要がある [SRC[>>19]]
とされています。
[29] [[HTTP]] では[[認証方式]]は特に限定されておらず、
[[IANA登録簿]]に新規に登録もできるようになっています。
[32] [[RTSP]] は [[HTTP]] に定義を委ねていますが、 [CODE(HTTP)@en[[[Basic]]]]
と [CODE(HTTP)@en[[[Digest]]]] の実装を[['''推奨''']]しています [SRC[>>31]]。
[30] [[SIP]] は[[IANA登録簿]]がなかった時代の [[HTTP]] から派生したためか、
そのようには明記されていません。また [CODE(HTTP)@en[[[Digest]]]]
には対応することが求められていますが、 [CODE(HTTP)@en[[[Basic]]]]
の実装は禁止されています。旧版では [CODE(HTTP)@en[[[pgp]]]]
が定義されていましたが、後に削除されています。
[37] [[MSRP]] は [CODE(HTTP)@en[[[Digest]]]] のみ認めています。
;; 詳しくはそれぞれの項を参照。
[51] [CODE[auth-scheme]] の値は、 [CODE(HTTP)@en[Authentication-Control:]]
[[ヘッダー]]でも使われます。
* 処理
;; [47] [[HTTP認証]]や各[[認証方式]]の項も参照。
[20] [[HTTP認証]]は[RUBYB[状態を持ちません]@en[stateless]]。
[[認証]]に必要な情報は、すべて[[要求]]に含めなければ[['''なりません''']]。 [SRC[>>19]]
[21] [[HTTP接続]]に基いていたり、束縛されていたりする[[認証]]は、
[[HTTP]] の仕様の範囲外とされており、[[認証]]された[[利用者]]以外が当該
[[HTTP接続]]を使えないことを保証できない限り、欠陥を持っています。 [SRC[>>19]]
;; [24] 1つの[[HTTP接続]]で[[要求]]と[[応答]]の組を複数回やり取りできますが、
先の[[要求]]と[[応答]]での[[認証]]の結果を以後の[[要求]]と[[応答]]に
(同じ[[HTTP接続]]を使っているという理由で) 適用してはいけないということです。
[[HTTP]] における [[HTTP接続]]は、[[状態]]を持つ[[プロトコル]]とは違って、
[[要求]]と[[応答]]の組を複数連続的にやり取りするためだけの構文的な存在に過ぎず、
それ以上の意味を持ちません。1つの [[HTTP接続]]で複数の[[要求]]と[[応答]]の組をやり取りするのと、
2つの別の[[HTTP接続]]で[[要求]]と[[応答]]の組をそれぞれ別々にやり取りするのとでは意味が変わってしまうべきではありません。
;; [23] [CODE(HTTP)@en[[[Negotiate]]]] のようにこの原則に反した [CODE(ABNF)@en[[[auth-scheme]]]]
もありますが、[[セキュリティー]]や[[相互運用性]]の問題を抱えている [SRC[>>22]]
と指摘されています。
;; [46] ただし、前の[[応答]]で提供された情報を次の[[要求]]に引き継ぐような形の状態は持つことがあります。
例えば[[ダイジェスト認証]]がそのような仕組みとなっています。
[48] 複数の[[認証方式]]を[[サーバー]]と[[クライアント]]の間で[[折衝]]する方法については、
[[challenge]] を参照。
* 認証方式の一覧
[1]
,*[CODE(ABNF)@en[[[auth-scheme]]]],*[CODE(ABNF)@en[[[challenge]]]] での使用 ([[応答]]),*[CODE(ABNF)@en[[[credentials]]]] での使用 ([[要求]]),*出典
,[CODE(HTTP)@en[[[AdobeAuth]]]],○
,[CODE(HTTP)@en[[[anon]]]],○,○
,[CODE(HTTP)@en[[[ApiKey]]]],,○
,[CODE(HTTP)@en[ApplePushNotifications]],,○
,[CODE(HTTP)@en[[[Atom]]]],○,○
,[CODE(HTTP)@en[[[AWS]]]],,○
,[CODE(HTTP)@en[[[AWS4-HMAC-SHA256]]]],○
,[CODE(HTTP)@en[[[Basic]]]],○,○,"[[RFC 1945]], [DEL[[[RFC 2068]]]], [[RFC 2617]]"
,[CODE(HTTP)@en[[[Bearer]]]],○,○
,[CODE[Bot]],,○
,[CODE(HTTP)@en[Cookie][Cookie (auth-scheme)]],○
,[CODE(HTTP)@en[[[CredSSP]]]],○,○
,[CODE(HTTP)@en[[[DelegatedToken]]]],○
,[CODE(HTTP)@en[[[Digest]]]],○,○,[[RFC 2617]]
,[CODE(HTTP)@en[[[Eap]]]],○,○,[[draft-torvinen-http-eap]]
,[CODE(HTTP)@en[[[GOOG1]]]],,○
,[CODE(HTTP)@en[[[GoogleLogin]]]],○,
,[CODE(HTTP)@en[[[GSS]]]],○,×,[[draft-johansson-http-gss]]
,[CODE(HTTP)@en[HHMAC]],,○
,[CODE(HTTP)@en[[[HOBA]]]],○,○
,[CODE(HTTP)@en[[[HTML]]]],○,×,[[HTML5]] [r2432-r2470)
,[CODE(HTTP)@en[[[hmac]]]],,○
,[CODE(HTTP)@en[[[IndieAuth]]]],○
,[CODE(HTTP)@en[JWT]],,○
,[CODE(HTTP)@en[[[Kerberos]]]],○
,[CODE(HTTP)@en[[[Mutual]]]]
,[CODE(HTTP)@en[[[Negotiate]]]],○,○,[[RFC 4559]]
,[CODE(HTTP)@en[[[NTLM]]]],○
,[CODE(HTTP)@en[[[OAuth]]]],○,○,[[OAuth]]
,[CODE(HTTP)@en[[[PEM]]]],○
,[CODE(HTTP)@en[[[pgp]]]],○,○,[DEL[[[RFC 2543]]]] ([[RFC 3261]] で[[非推奨]])
,[CODE(HTTP)@en[[[Remote-Passphrase]]]],○,○
,[CODE(HTTP)@en[[[SASL]]]],○,○,[[draft-nystrom-http-sasl]]
,[CODE(HTTP)@en[SCRAM-SHA-1]],○,○
,[CODE(HTTP)@en[SCRAM-SHA-256]],○,○
,[CODE(HTTP)@en[[[Session]]]],×,○,[[WD-session-id]]
,[CODE(HTTP)@en[[[SFLY]]]],,○
,[CODE(HTTP)@en[[[SharedKey]]]],,○
,[CODE(HTTP)@en[[[SharedKeyLite]]]],,○
,[CODE(HTTP)@en[[[SharedAccessSignature]]]],,○
,[CODE(HTTP)@en[[[Token]]]],,○
,[CODE(HTTP)@en[vapid]],○,○
,[CODE(HTTP)@en[[[WebID-RSA]]]],○,○
,[CODE(HTTP)@en[[[WRAP]]]],○,○
,[CODE(HTTP)@en[[[WSSE]]]],×,○
,[CODE(HTTP)@en[[[W3C-API]]]],×,○
[HISTORY[
[2] [[RFC 2617]] 時代までは [[IANA登録簿]]がありませんでしたが、 [[RFC 7235]]
で新設されました (>>18) [SRC[>>15]]。
]HISTORY]
[39] [[JSON]] 形式の [CODE(ABNF)@en[[[auth-scheme]]]] および
[CODE(ABNF)@en[[[auth-param]]]] の一覧が >>40 にあります。
[REFS[
- [40] [CITE@en[data-web-defs/headers.txt at master · manakai/data-web-defs]] ([TIME[2014-10-22 15:33:28 +09:00]] 版) <https://github.com/manakai/data-web-defs/blob/master/doc/headers.txt>
]REFS]
[49] [[RFC 7804]] は [CODE[SCRAM-]] から始まる命名規則を定義していますが、
特にこの名前を予約しているわけではなく、命名規則に従っていても
[[IANA登録簿]]に通常の規則により登録することを求めています。
* Web ブラウザーによる実装
[42] [[Webブラウザー]]は、[[Web互換性]]のため、次の[[認証方式]]に対応する必要があります。
[FIG(short list)[
- [CODE(HTTP)@en[[[Basic]]]]
- [CODE(HTTP)@en[[[Digest]]]]
]FIG]
[43] [[Webブラウザー]]は、次の[[認証方式]]に対応していることもあります。
[FIG(short list)[
- [CODE(HTTP)@en[[[Negotiate]]]]
- [CODE(HTTP)@en[[[NTLM]]]]
]FIG]
[44] [[Webブラウザー]]は、[[Web互換性]]のため、次の[[認証方式]]に直接対応することはできません。
[FIG(short list)[
- [CODE(HTTP)@en[[[Bearer]]]]
- [CODE(HTTP)@en[[[OAuth]]]]
]FIG]
;; [45] ある日突然 [[Webブラウザー]]がこれらを実装すると、[[サーバー]]側が想定しておらず、
[[セキュリティー]]上の問題となる可能性があります。 [[XHR]] などにより[[著者]]の[[スクリプト]]が独自に実装して
[[Webブラウザー]]経由でアクセスする分には問題ありません。
* OAuth 2.0 認証方式
[41] [[OAuth 2.0]] では、[[要求]]における[[アクセストークン]]の送信や[[応答]]における[[認証]]エラーの通知に、
専用または兼用の [[HTTP認証]]方式を使うことができるとしています。そのような[[認証方式]]に対して若干の制約も課しています。
[[アクセストークン型]]と[[認証方式]]名は揃えることが推奨されています。
;; [[資源鯖]]、[[アクセストークン型]]を参照。
* 統計
[3] [CITE@en[HTTP/1.1 WWW-Authenticate header]] ([TIME[2009-07-19 11:05:40 +09:00]] 版) <http://www.http-stats.com/WWW-Authenticate>
* 関連
[16] [CODE(ABNF)@en[[[auth-param]]]] も参照。
* 歴史
** 誕生
[REFS[
- [6] [CITE[Request Headers in the HTTP protocol]]
( ([TIME[2001-11-29 11:01:38 +09:00]] 版))
<http://www.w3.org/Protocols/HTTP/HTRQ_Headers.html#z9>
]REFS]
** RFC 第1世代
[REFS[
- [7] [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[
- [11] [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[
- [12]
[13]
[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-1.2>
]REFS]
[14] [CITE@en[draft-stecher-icap-subid-00 - ICAP Extensions]]
( ([TIME[2014-08-31 17:09:58 +09:00]] 版))
<http://tools.ietf.org/html/draft-stecher-icap-subid-00#section-3.4>
[36] >>35 は類似した一連の[[認証方式]]について [CODE(HTTP)@en[[[RA-]]]]
から始まる [CODE(ABNF)@en[[[auth-scheme]]]] の命名規則を提案していました。
また >>38 は [CODE(HTTP)@en[[[SCRAM-]]]] から始まる命名規則を提案していました。
しかしいずれも支持を集められなかったようです。
[REFS[
- [35] [CITE@en[draft-williams-http-rest-auth-03 - RESTful Authentication Pattern for the Hypertext Transport Protocol (HTTP)]] ([TIME[2014-10-16 16:09:13 +09:00]] 版) <http://tools.ietf.org/html/draft-williams-http-rest-auth-03>
- [38] [CITE@en[draft-melnikov-httpbis-scram-auth-00 - Salted Challenge Response (SCRAM) HTTP Authentication Mechanism]] ([TIME[2014-10-17 08:44:16 +09:00]] 版) <https://tools.ietf.org/html/draft-melnikov-httpbis-scram-auth-00>
]REFS]
[55] [CITE@en[RFC 3050 - Common Gateway Interface for SIP]], [TIME[2021-04-19T04:38:05.000Z]], [TIME[2021-04-21T02:43:08.426Z]] <https://tools.ietf.org/html/rfc3050#section-5.5.1.1>
** RFC 第4世代
[REFS[
- [34] '''[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>'''
- [33] [CITE@en[RFC 7236 - Initial Hypertext Transfer Protocol (HTTP) Authentication Scheme Registrations]] ([TIME[2014-09-10 00:40:16 +09:00]] 版) <https://tools.ietf.org/html/rfc7236>
]REFS]
[FIG(quote)[
[FIGCAPTION[
[50] [CITE@en[XProc 2.0: Standard Step Library]]
([TIME[2016-07-21 14:39:32 +09:00]])
<https://www.w3.org/TR/2016/NOTE-xproc20-steps-20160721/#cv.request>
]FIGCAPTION]
> Appropriate values for the auth-method attribute are “Basic” or “Digest” but other values are allowed. If the authentication method is “Basic” or “Digest”, authentication is handled as per '''['''RFC 2617''']'''. The interpretation of auth-method values on c:request other than “Basic” or “Digest” is implementation-defined[SRC[XP]].
]FIG]
[FIG(quote)[
[FIGCAPTION[
[52] [CITE@en[RFC 8040 - RESTCONF Protocol]]
([TIME[2017-03-27 23:03:09 +09:00]])
<https://tools.ietf.org/html/rfc8040#section-2.5>
]FIGCAPTION]
> If certificate-based authentication is not feasible
(e.g., because one cannot build the required PKI for clients), then
HTTP authentication MAY be used. In the latter case, one of the HTTP
authentication schemes defined in the "Hypertext Transfer Protocol
(HTTP) Authentication Scheme Registry" (Section 5.1 in '''['''RFC7235''']''')
MUST be used.
]FIG]