/
375.txt
148 lines (105 loc) · 9.99 KB
/
375.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
* 仕様書
[REFS[
- [1] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2014-12-28 14:19:21 +09:00]] 版) <http://tools.ietf.org/html/rfc5849#section-1.1>
- [3] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2014-12-28 14:19:21 +09:00]] 版) <http://tools.ietf.org/html/rfc5849#section-2>
- [7] [CITE@en[RFC 5849 - The OAuth 1.0 Protocol]] ([TIME[2014-12-28 14:19:21 +09:00]] 版) <http://tools.ietf.org/html/rfc5849#section-2.3>
- [23] [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.4>
- [33] [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-3.1.1>
- [57] [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.2.1>
- [71] [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-5.1>
- [6] [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.3>
- [16] [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>
- [17] [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>
- [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#appendix-A.12>
- [34] [CITE@en[RFC 6750 - The OAuth 2.0 Authorization Framework: Bearer Token Usage]] ([TIME[2015-02-11 06:22:47 +09:00]] 版) <http://tools.ietf.org/html/rfc6750#section-2>
- [36] [CITE@en[RFC 7009 - OAuth 2.0 Token Revocation]] ([TIME[2014-12-21 18:10:21 +09:00]] 版) <http://tools.ietf.org/html/rfc7009#section-2.1>
]REFS]
* OAuth 1.0 トークン credentials
[21] [DFN[[RUBYB[トークン]@en[token]]]]は、
[[鯖]]が発行する固有の識別子であり、
[[認証された要求]]と[[クライアント]]が[[認可]]を要求している、または取得した[[資源所有者]]とを関連付けるため[[クライアント]]が使うものです [SRC[>>1]]。
[[OAuth 1.0]] で用いられる [[credentials]] の一種で、仕様書中ではしばしば[DFN[[RUBYB[[[トークンcredentials]]]@en[token credentials]]]]とも呼ばれています。
[22] [[トークンcredentials]]は、
[DFN[[RUBYB[[[トークン識別子]]]@en[token identifier]]]]と[DFN[[RUBYB[[[トークン共有秘密]]]@en[token shared-secret]]]]で構成されます。
;; [2] 元はそれぞれ [DFN[[[access token]]]] および [DFN[[[access token secret]]]]
と呼んでいました [SRC[>>1]]。
;; [29] [[トークン識別子]]は[[認証された要求]]に直接含めて送信されますが、
[[トークン共有秘密]]は直接は含まれません。[[トークン識別子]]は公開されても問題は無いはずですが、
通常その必要がないので[[鯖]]と[[クライアント]]の間でだけ共有されます。
[[トークン共有秘密]]は[[鯖]]と[[クライアント]]の間で秘密にする必要があります。
;; [31] 厳密性を必要としない場面では、[[アクセストークン]]と[[アクセストークン秘密]]をまとめて「[[アクセストークン]]」と呼ぶこともあります。
* OAuth 2.0 アクセストークン
[24] [DFN[[RUBYB[[[アクセストークン]]]@en[access token]]]]は、
[[被保護資源]]へのアクセスに使う[[credentials]] であり、
[[クライアント]]に発行された[[認可]] ([[資源所有者]]が[[承諾]]したアクセスの範囲 ([[scope]])
や期間) を表す[[文字列]]です [SRC[>>23]]。
[25] 通常この[[文字列]]は[[クライアント]]には[[不透明]]なものです [SRC[>>23]]。
[[アクセストークン]]は[[認可]]情報を取得するために使う識別子でも構いませんし、
それ自体に[[認可]]情報 (と検証するための[[署名]]) を含んでいても構いません [SRC[>>23]]。
;; [30] [[OAuth 1.0]] [[アクセストークン]]は[[識別子]]と[[共有秘密]]の2つの値の組でしたが、
[[OAuth 2.0]] [[アクセストークン]]は1つの値です。
[20] [[アクセストークン]]を構成する[[文字]]は、[CODE(URI)@en[[[access_token]]]]
[[引数]]の構文より、1つ以上の[[印字可能ASCII文字]]に制限されます。
;; [[アクセストークン型]]によっては更に制限があります。
[60] [[アクセストークン]]の長さは、 [[OAuth]] 仕様上制限がありません。
[[クライアント]]は[[アクセストークン]]の長さに仮定を置くべきではありません。
[[認可鯖]]は、[[アクセストークン]]の長さを明文化する[['''べきです''']]。
[SRC[>>58, >>71]]
[15] [[認可鯖]]は、[[アクセストークン]]を推測できないようにしなければ[['''なりません''']] [SRC[>>6, >>17]]。
攻撃者が推測できる確率は 2[SUP[-128]] [[以下]]で[['''なければならず''']]、
2[SUP[-160]] [[以下]]である[['''べきです''']] [SRC[>>17]]。
[26] [[クライアント]]が[[アクセストークン]]を使う際に、その他の[[認証]]の
[[credentials]] が必要であっても構いません (が、 [[OAuth]] の仕様の範囲外です)
[SRC[>>23]]。
;; [27] 例えば [[OAuth]] とは別に[[基本認証]]の [[credentials]] が必要かもしれません。
[11] [[アクセストークン]]は、転送や蓄積において[[機密]]を保持しなければ[['''ならず''']]、
[[認可鯖]]、適用対象の[[資源鯖]]、発行先の[[クライアント]]のみの間で共有しなければ[['''なりません''']]
[SRC[>>6]]。
;; [14] [[暗示的承諾型]]では[[資源所有者]]に[[アクセストークン]]が転送されるため、
この要件を完全には満たせません。
[28] [[アクセストークン]]は、[[認可承諾]]フローにより、
あるいは[[更新トークン]]を使って取得できます。
[4] [[アクセストークン]]には、種別 ([[トークン型]]) があり、それによって[[被保護資源]]にアクセスする際の[[認証]]方式が異なります。
[12] [[アクセストークン]]は、[[HTTPS]] [[サーバー認証]]のもとでしか転送しては[['''なりません''']]
[SRC[>>6, >>16]]。
;; [13] [[アクセストークン]]は[[認可エンドポイント]]や[[トークンエンドポイント]]で用いられますが、そこでは [[TLS]] が要求されています。
[[リダイレクトURL]]では [[TLS]] が原則とされていますが、[[平文]]も限定的に認められており、
その場合は >>12 を満たせません。
* アクセストークンの要求
[8] [[OAuth 1.0]] では、[[クライアント]]は[[鯖]]に[[トークン要求]]を送信することで、
[[トークンcredentials]] ([[アクセストークン]]と[[アクセストークン秘密]])
を取得できます。
[9] [[OAuth 2.0]] では、[[クライアント]]は[[鯖]]の[[トークンエンドポイント]]に要求を送信することで、
[[アクセストークン]]を取得できます。
* アクセストークンの利用
[10] [[アクセストークン]]を利用した[[被保護資源]]へのアクセス方法については、
[[資源鯖]]を参照。
* OAuth 1.0 トークンcredentialsの破棄
[5] [[鯖]]は、 [[token credentials]] が[[クライアント]]に後に、
[[資源所有者]]が[[token credentials]] を取り消し ([[revoke]]) できるようにする[['''べきです''']]
[SRC[>>3]]。
* [CODE(URI)@en[response_type=token]]
[32] [[OAuth 2.0]] [[認可エンドポイント]]の [CODE(URI)@en[[[response_type]]]] [[引数]]の値
[DFN[[CODE(URI)@en[[[token]]]]]] は、[[アクセストークン]]を要求している
([[暗示的承諾型]]である) ことを意味します [SRC[>>33, >>57]]。
* [CODE(URI)@en[access_token]] 引数
[59] [[OAuth 2.0]] [[認可エンドポイント]]からの[[リダイレクトURL]]に追加される[[素片識別子]]の[[引数]]
[DFN[[CODE(URI)@en[[[access_token]]]]]] は、[[アクセストークン]]を表します。
この[[引数]]は[[必須]]です [SRC[>>58]]。
[81] [[OAuth 2.0]] [[トークンエンドポイント]]からの [[JSON]] [[応答]]の[[引数]]
[DFN[[CODE(URI)@en[[[access_token]]]]]] は、[[アクセストークン]]を表します。
この[[引数]]は[[必須]]です [SRC[>>71]]。
[19] この[[引数]]の値は、1文字以上の[[印字可能ASCII文字]]の列です [SRC[>>18]]。
[35] [[資源鯖]]の [CODE(URI)@en[[[access_token]]]] [[引数]] [SRC[>>34]] は、
[[認証]]に使う[[アクセストークン]]を表します。
* [CODE(URI)@en[token_type_hint=access_token]]
[37] [CODE(URI)@en[[[token_type_hint]]]] [[引数]]の値
[DFN[[CODE(URI)@en[[[access_token]]]]]] は、[[アクセストークン]]を表します [SRC[>>36]]。
* セキュリティー
[39] [[クライアント]]は、[[アクセストークン]]を保存した[[ストレージ]]等に攻撃者がアクセスできないか注意する必要があります [SRC[>>38]]。
同じ環境で動作する他の[[プログラム]]から[[ストレージ]]にアクセスできるかもしれません。
動作している端末全体が盗まれることもあるかもしれません [SRC[>>38]]。
[40] そのような場合の対策という意味でも、[[認可鯖]]は[[資源所有者]]に対して発行済の[[アクセストークン]]を [[revoke]] させられる仕組みを提供するべきでしょう。
[REFS[
- [38] [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.1.3>
]REFS]