0

次の 2 つの基本文字列があるとします。

GET&https%3A%2F%2Fapi.trademe.co.nz%2Fv1%2FMyTradeMe%2FWatchlist%2Fall.json&oauth_consumer_key%3DE55FD61CBB8400F67CED12FD35761BEDED%26oauth_nonce%3D83236f86429111e3963c0e4586dd63b1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1383267848%26oauth_token%3D2A378A062E35415E242AD38EA01DE72977%26oauth_version%3D1.0
GET&https%3A%2F%2Fapi.trademe.co.nz%2Fv1%2FMyTradeMe%2FWatchlist%2Fall.json&oauth_consumer_key%3DE55FD61CBB8400F67CED12FD35761BEDED%26oauth_nonce%3D83236f86429111e3963c0e4586dd63b1%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1383267856%26oauth_token%3D2A378A062E35415E242AD38EA01DE72977%26oauth_version%3D1.0

これら 2 つの文字列の唯一の違いは oauth_timestamp であり、以下のように署名を生成します。

jBy364dHhQ0kVqYSQePXqyzoDQE=
enKa2bqAgghJNXZxRbTx/2ZQYFI=

私を悩ませているのは、2番目の文字列が署名を生成/しますが、最初の署名ではなく、oauth署名が正しくないことです。

これは、署名を生成するための私の python コードです。

binascii.b2a_base64(hmac.new('{}&{}'.format(settings.OAUTH_SECRET, oauth_token_secret), base_string, sha1).digest())[:-1]
4

1 に答える 1

1

あなたのコードは正常に動作しています。/有効な base64 文字、具体的には 63 です。

別の動作が必要な場合は、Python のbase64ライブラリb64encodeメソッドを使用し、引数を指定して、とaltchars=を置き換える代替文字を指定できます。+/

たとえば、ファイル名に (非標準!) Modified Base64 を使用する場合は、引数として次のように指定"+-"します。altchars

base64.b64encode(hmac.new(...), altchars='+-')

ただし、これは、使用することを選択したサードパーティのエンドポイントと互換性がない場合があります. 可能であれば、デフォルトのままにしておく方がずっと良いでしょう。

于 2013-11-01T01:39:55.393 に答える