-
Notifications
You must be signed in to change notification settings - Fork 4
/
392.txt
93 lines (75 loc) · 4.09 KB
/
392.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
[2] [[OAuth 1.0]] では[[プロトコル]]を構成する名前と値の組のことを[DFN[[RUBYB[[[引数]]]@en[parameter]]]]と呼んでいます。
* 仕様書
[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-3.4.1.3>
]REFS]
* 構文
[3] [[引数]]には、
[FIG(list)[
- [4] [[要求]]の [CODE(HTTP)@en[[[Authorization:]]]] [[ヘッダー]]で使われるもの
- [5] [[要求URL]]の [[URL query]] で使われるもの
- [6] [[要求]]の [CODE(MIME)@en[[[application/x-www-form-urlencoded]]]] [[payload body]]
で使われるもの
- [7] [[応答]]の [CODE(MIME)@en[[[application/x-www-form-urlencoded]]]] [[payload body]]
で使われるもの
]FIG]
... があります。
;; [8] [[OAuth 1.0]] は [CODE(MIME)@en[[[multipart/form-data]]]] その他の
[[MIME型]]は使いません。
* 引数の一覧
[30] 次の[[引数]]があり、 [CODE(HTTP)@en[[[Authorization:]]]]、
[[URL query]]、または [[payload body]] で[[クライアント]]により使われます。
[FIG(short list)[
- [CODE(URI)@en[[[oauth_callback]]]]
- [CODE(URI)@en[[[oauth_verifier]]]]
- [CODE(URI)@en[[[oauth_consumer_key]]]]
- [CODE(URI)@en[[[oauth_token]]]]
- [CODE(URI)@en[[[oauth_signature]]]]
- [CODE(URI)@en[[[oauth_signature_method]]]]
- [CODE(URI)@en[[[oauth_timestamp]]]]
- [CODE(URI)@en[[[oauth_nonce]]]]
- [CODE(URI)@en[[[oauth_version]]]]
]FIG]
[31] 次の[[引数]]があり、 [[payload body]] で[[鯖]]により使われます。
[FIG(short list)[
- [CODE(URI)@en[[[oauth_token]]]]
- [CODE(URI)@en[[[oauth_token_secret]]]]
- [CODE(URI)@en[[[oauth_callback_confirmed]]]]
]FIG]
[32] 次の[[引数]]があり、[[資源所有者]]にアクセスさせる [[URL]] の
[[query]] で指定します。
[FIG(short list)[
- [CODE(URI)@en[[[oauth_token]]]]
- [CODE(URI)@en[[[oauth_verifier]]]]
]FIG]
* 要求引数
[9] [[認証された要求]]では、次の[[引数]]のことを[RUBYB[[[要求引数]]]@en[request parameter]]
[SRC[>>1]] と呼んでいます。[[要求引数]]は[[署名]]の対象内となります。
[FIG(list)[
- [10] [[要求URL]]の [[query]] を [CODE(MIME)@en[[[application/x-www-form-urlencoded]]]]
として解釈した時の名前と値の組
- [11] [[要求]]の [CODE(HTTP)@en[[[Authorization:]] [[OAuth]]]] [[ヘッダー]]の
[CODE(HTTP)@en[[[realm]]]] 以外の[[引数]]の名前と値の組
- [12] [[要求]]の [CODE(HTTP)@en[[[Content-Type:]]]] が
[CODE(MIME)@en[[[application/x-www-form-urlencoded]]]] の場合、 [[payload body]]
をそう解釈した時の名前と値の組
]FIG]
[13] [[要求引数]]は、[[署名基底文字列]]の一部となります。
その際 [CODE(HTTP)@en[[[oauth_signature]]]] [[引数]]は、
[[署名基底文字列]]には含めては[['''なりません''']] [SRC[>>1]]。
また省略可能な[[引数]]を省略する場合には、
[[署名基底文字列]]に含めては[['''なりません''']] [SRC[>>1]]。
[14] [[署名基底文字列]]の作成時には [CODE(MIME)@en[[[application/x-www-form-urlencoded]]]]
の[[パーセント符号化]]や [CODE(URI)[[[+]]]] は[[復号]]しますが、
[CODE(HTTP)@en[[[Authorization:]]]] [[ヘッダー]]の[[引数]]はそのまま[[復号]]せずに使います [SRC[>>1]]。
* 正規化
[15] [[要求引数]]の[RUBYB[[[正規化]]]@en[normalization]]は、次のように行います [SRC[>>1]]。
[FIG(steps)[
= [16] 各[[引数]]の名前と値をそれぞれ[[符号化]]します。
= [17] [[引数]]を名前の[[昇順]]で[[整列]]します。同名の[[引数]]が複数あれば、
値で[[整列]]します。
= [18] 名前と値を [CODE[[[=]]]] で連結します。
= [19] [[引数]]を [CODE[[[&]]]] で連結します。
]FIG]
[17] [[signature base string]] の計算時に引数は[[パーセント符号化]]してから[[整列]]されますが、
[[整列]]してから[[パーセント符号化]]する実装があり、正しいサーバーとやりとりできなかったりします。 [TIME[2013-09-14T08:14:08.700Z]]