0

OAUTHを実装すると、次の問題が発生します。署名ベースを作成するとき、エンコードされたパラメーターを再度エンコードする必要がありますか、それともパラメーターを正規化するときにエンコードされたパラメーターをエンコードから除外する必要がありますか?

4

2 に答える 2

0

ドキュメントを読んだときに、ダブルエンコーディングを適用する必要があるようです。

たとえば、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回使用されます)。

于 2012-08-28T07:25:17.537 に答える
0

仕様による:https ://www.rfc-editor.org/rfc/rfc5849

パラメータの各レベルがエンコードされます。

したがって、各OAuth(作成中の署名ではない)とユーザーパラメーターがエンコードされます。

次に、これら(レルムを除く)は、ソートされたパラメーターリストに結合されます。

その文字列はURLエンコードされ、URLエンコードされたメソッドとURLエンコードされたベースURLで結合されます。

これが基本文字列であり、ハッシュされる前の2レベルのエンコーディングです。

于 2019-01-19T03:05:30.263 に答える