0

私はdjango-pistonと協力して、oAuthをサポートするAPIを作成しようとしています。

私は次の場所でチュートリアルを使い始めました。

http://blog.carduner.net/2010/01/26/django-piston-and-oauth/

テスト目的で、キーとシークレットの両方を「abcd」に設定して、ピストンの管理インターフェースにコンシューマーを追加しました。

URLが正常に接続され、oAuthプロバイダーが呼び出されます。

ただし、tripit(python get_request_token.py " http://127.0.0.1:8000/api " abcd abcd)を使用してget requestトークンテストを実行すると、次のエラーが発生します。

署名が無効です。予想される署名ベース文字列:GET&http%3A%2F%2F127.0.0.1%3A8000%2Fapi%2Foauth%2Frequest_token%2F&oauth_consumer_key%3Dabcd%26oauth_nonce%3D0c0bdded5b1afb8eddf94f7ccc672658%26oauth_

問題は、Pistonのoauth.pyの_check_signatureメソッド内にあるようです。

valid_sig = signature_method.check_signature(oauth_request, consumer, token, signature)

falseを返しています。ただし、署名を検証する方法を理解することはできません。

何か案は?

アップデート:

テストコンシューマーをピストンのバックエンドから削除すると、返される応答は「無効なコンシューマー」に正しく設定されているため、このルックアップは機能しているように見えます。

4

2 に答える 2

0

私が見つけた最終的な答えは、oauth_consumerの作業コピーをアプリケーションディレクトリにインストールすることでした。このアプリケーション内にコンシューマーを追加すると、すべてが期待どおりに機能しました。

于 2010-05-30T13:43:03.400 に答える
0

@Ricardoとこのエラーで問題を抱えている他の人(「答え」については申し訳ありませんが、まだコメントはありません)、ピストンのコードで提供されるテストケースに従うことから署名を生成することで、このエラーを回避できました。例:

>>> from piston.oauth import *
>>> from piston.models import *
>>> consumer = Consumer.objects.get(id=1)
>>> oaconsumer = OAuthConsumer(consumer.key, consumer.secret)
>>> request = OAuthRequest.from_consumer_and_token(oaconsumer, http_url='http:
    //localhost:8000/api/oauth/request_token/')
>>> signature_method = OAuthSignatureMethod_HMAC_SHA1()
>>> request.sign_request(signature_method, oaconsumer, None)
>>> request.sign_request(signature_method, oaconsumer, None)
>>> request.parameters
{'oauth_nonce': '64379482', 'oauth_timestamp': 1297147940, 'oauth_consumer_key': u'8aZSFj3W54h8J8sCpx', 'oauth_signature_method': 'HMAC-SHA1', 'oauth_version': '1.0', 'oauth_signature': 'kGSLCZjYzAHXsa8f9sL52Kq1F2w='}

ここから、ブラウザでこれらのパラメータを使用します。例: http:// localhost:8000 / api / oauth / request_token /?oauth_nonce = 64379482&oauth_timestamp = 1297147940&oauth_consumer_key = 8aZSFj3W54h8J8sCpx&oauth_signature_method = HMAC-SHA1&oauth_version = 1.0&

これにより、「oauth_token_secret = 37VZKRV3fXRLAw5tekZD2bwnMhXqGwgx&oauth_token = LRnexBGTNC4nDXpv9M&oauth_callback_confirmed=true」が生成されます

Martinが指摘したように、サンプルコードまたはURLのいずれかに「/」を省略すると、署名が「無効」になります。

于 2011-02-08T07:02:35.280 に答える