/
375.txt
118 lines (85 loc) · 7.94 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
* 仕様書
[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>
]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つの値です。
[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]]。