OAUTHを実装すると、次の問題が発生します。署名ベースを作成するとき、エンコードされたパラメーターを再度エンコードする必要がありますか、それともパラメーターを正規化するときにエンコードされたパラメーターをエンコードから除外する必要がありますか?
2 に答える
ドキュメントを読んだときに、ダブルエンコーディングを適用する必要があるようです。
たとえば、HTTPリクエストは次のとおりです。
POST /request?b5=%3D%253D&a3=a&c%40=&a2=r%20b HTTP/1.1
Host: example.com
Content-Type: application/x-www-form-urlencoded
Authorization: OAuth realm="Example",
oauth_consumer_key="9djdj82h48djs9d2",
oauth_token="kkk9d7dh3k39sjv7",
oauth_signature_method="HMAC-SHA1",
oauth_timestamp="137131201",
oauth_nonce="7d8f3e4a",
oauth_signature="djosJKDKJSD8743243%2Fjdk33klY%3D"
c2&a3=2+q
シグニチャベーススティングで使用される次の(完全にデコードされた)パラメータが含まれています。
+------------------------+------------------+
| Name | Value |
+------------------------+------------------+
| b5 | =%3D |
| a3 | a |
| c@ | |
| a2 | r b |
| oauth_consumer_key | 9djdj82h48djs9d2 |
| oauth_token | kkk9d7dh3k39sjv7 |
| oauth_signature_method | HMAC-SHA1 |
| oauth_timestamp | 137131201 |
| oauth_nonce | 7d8f3e4a |
| c2 | |
| a3 | 2 q |
+------------------------+------------------+
「b5」の値は「==」ではなく「=%3D」であることに注意してください。 「c@」と「c2」の両方に空の値があります。署名ベース文字列を構築する目的でこの仕様で指定されているエンコード規則では、エンコードされたスペース文字(ASCIIコード32)を表すための「+」文字(ASCIIコード43)の使用は除外されていますが、この方法は「 application / x-www-form-urlencoded "エンコードされた値であり、" a3 "パラメーターインスタンスの1つで示されているように適切にデコードする必要があります(" a3 "パラメーターはこのリクエストで2回使用されます)。
仕様による:https ://www.rfc-editor.org/rfc/rfc5849
パラメータの各レベルがエンコードされます。
したがって、各OAuth(作成中の署名ではない)とユーザーパラメーターがエンコードされます。
次に、これら(レルムを除く)は、ソートされたパラメーターリストに結合されます。
その文字列はURLエンコードされ、URLエンコードされたメソッドとURLエンコードされたベースURLで結合されます。
これが基本文字列であり、ハッシュされる前の2レベルのエンコーディングです。