/
433.txt
97 lines (75 loc) · 6.84 KB
/
433.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
[20] [DFN[[RUBYB[[[資源所有者合言葉credentials]]]@en[resource owner password credentials]]]][[承諾型]]は、
[[資源所有者]]の[RUBY[[[合言葉]]][パスワード]]を[[クライアント]]が直接受け取り、
これを[[認可鯖]]に渡すことで[[アクセストークン]]の交付を受ける[[承諾型]]です。
[21] 本[[承諾型]]は危険性が高いもので、やむを得ない場合を除き使うべきではないと考えられています。
* 仕様書
[REFS[
- [1] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-1.3.3>
- [5] '''[CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.3>'''
- [11] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-4.3.2>
- [13] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.7>
- [15] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.8>
- [18] [CITE@en[RFC 6749 - The OAuth 2.0 Authorization Framework]] ([TIME[2014-12-15 14:15:35 +09:00]] 版) <http://tools.ietf.org/html/rfc6749#section-10.10>
- [19] [CITE@en[RFC 6819 - OAuth 2.0 Threat Model and Security Considerations]] ([TIME[2015-02-10 06:43:00 +09:00]] 版) <http://tools.ietf.org/html/rfc6819#section-4.4.3>
]REFS]
* 意味
[2] [RUBYB[[[資源所有者合言葉credentials]]]@en[resource owner password credentials]][[承諾型]]は、
[[アクセストークン]]を得るために[[資源所有者]]の [[credentials]]
([RUBYB[[[利用者名]]]@en[username]]と[RUBYB[[[合言葉]]]@en[password]])
を直接[[認可承諾]]として使うものです。 [SRC[>>1]]
;; [6] [[認可符号]]フローや[[暗示的承諾型]]フローとは違って、[[クライアント]]が[[資源所有者]]の
[[credentials]] を一旦取得する必要があります。
[14] 本[[承諾型]]は[[合言葉]]を使う点、[[資源所有者]]が[[クライアント]]にそれを委ねなければならない点から、
特に危険性が大きいものです。
[[認可鯖]]は本[[承諾型]]で発行される[[アクセストークン]]の[[適用範囲]]と[[寿命]]を十分検討するべきです。
[[認可鯖]]および[[クライアント]]はできるだけ他の[[承諾型]]を使う[['''べきです''']]。 [SRC[>>13]]
;; [22] [[認可鯖]]は[[クライアント]]が[[資源所有者]]に対して明確に説明しているかどうかを一切関知できません。
他のフローでは[[認可鯖]]が[[資源所有者]]に対して行うような[[適用範囲]]の説明も、
本[[承諾型]]では機会がありません。例えば[[クライアント]]が読み取りのみ行うと説明しつつ、
実際には読み書きの両方が可能な[[適用範囲]]を[[認可鯖]]に求めることもあり得ます。
;; [23] ですから[[認可鯖]]は、他の手段、例えば[[電子メール]]による通知で、
事後であっても[[資源所有者]]に何が行われたか説明する必要があるかもしれません。
[16] なお[[資源所有者]]の[[合言葉]]を[[平文]]で送信しては[['''なりません''']]。
[17] [[認可鯖]]は、[[合言葉]]の推測による攻撃を防がなければ[['''なりません''']]。
生成された[[トークン]]の場合、
攻撃者が推測できる確率は 2[SUP[-128]] [[以下]]で[['''なければならず''']]、
2[SUP[-160]] [[以下]]である[['''べきです''']]。
そうでない[[末端利用者]]が扱う[[credentials]]の場合でも、
何らかの方法で保護しなければ[['''なりません''']]。 [SRC[>>18]]
* フロー
[7] まず[[資源所有者]]が[[クライアント]]に [[credentials]]
([[利用者名]]と[[合言葉]])を提供します [SRC[>>5]]。
これをどのような形で行うかは、[[OAuth]] 仕様の範囲外 [SRC[>>5]] とされています。
[8] [[クライアント]]は[[資源所有者]]から受信した[[利用者名]]と[[合言葉]]を指定した要求を[[認可鯖]]の[[トークンエンドポイント]]に送信し、
[[アクセストークン]]を求めます [SRC[>>5]]。
[9] [[認可鯖]]の[[トークンエンドポイント]]は[[クライアント認証]]を行い[[資源所有者]]の
[[credentials]] を検証し、[[アクセストークン]]を発行します [SRC[>>5]]。
[[更新トークン]]の発行も禁止はされていません。しかし本フローの危険性を鑑み、
発行しない方がよいかもしれません [SRC[>>19]]。
[10] [[クライアント]]は、[[アクセストークン]]を受信したら[[クライアント]]の
[[credentials]] を破棄しなければ[['''なりません''']] [SRC[>>5]]。
[FIG(sequence)[
:R:[[資源所有者]]
:C:[[クライアント]]
:S:[[認可鯖]]
:R -> C:[[資源所有者]]の [[credentials]] を提供
:C -> S:[[トークンエンドポイント]]に [[credentials]] を送信
:S -> C:[[アクセストークン]]を発行
:#C#:[[credentials]] を破棄
]FIG]
* 文脈
[3] 本[[承諾型]]は、[[クライアント]]と[[資源所有者]]との間に高度な信頼がある場合
(例えば[[クライアント]]が当該[[装置]]の [[OS]] や高い[[特権]]を持つ[[応用]]である場合)
で、他の[[承諾型]]が馴染まない場合に限って使うべきです [SRC[>>1, >>5]]。
[[認可鯖]]は、本[[承諾型]]を有効にする際に特別に注意を払うべきであり、
他のフローが馴染まない場合に限って認めるべきです [SRC[>>5]]。
[4] 本[[承諾型]]は[[資源所有者]]の [[credentials]] ([[利用者名]]と[[合言葉]])
を (普通は対話的な[[フォーム]]により) [[クライアント]]が直接知ることができる場合に適しています
[SRC[>>1, >>5]]。既に[[基本認証]]や[[ダイジェスト認証]]に対応している[[クライアント]]が
[[OAuth]] に移行する時に、既に保存している [[credentials]] を[[アクセストークン]]に変換するためにも使うことができます
[SRC[>>5]]。いずれにせよ、 [[credentials]] は一旦[[アクセストークン]]を得たら不要となり、
以後保存する必要はありません [SRC[>>1]]。
* [CODE(URI)@en[grant_type=password]]
[12] [[OAuth 2.0]] [[トークンエンドポイント]]の [CODE(URI)@en[[[grant_type]]]]
[[引数]]の値 [DFN[[CODE(URI)@en[[[password]]]]]] [SRC[>>11]] は、
[[資源所有者]]の [[credentials]] から[[アクセストークン]]を求める要求であることを表します。