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) 运行我的获取请求令牌测试时,我收到以下错误:

无效的签名。Expected signature base string: GET&http%3A%2F%2F127.0.0.1%3A8000%2Fapi%2Foauth%2Frequest_token%2F&oauth_consumer_key%3Dabcd%26oauth_nonce%3D0c0bdded5b1afb8eddf94f7ccc672658%26oauth_signature_method%3DHMAC-SHA1%26oauth_timestamp%3D1275135410%26oauth_version%3D1.0

问题似乎出在 Piston 的 oauth.py 的 _check_signature 方法中,其中

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

正在返回错误。但是,我无法弄清楚如何验证签名。

有任何想法吗?

更新:

如果我从活塞的后端删除测试消费者,返回的响应被正确设置为“无效消费者”,所以这个查找似乎正在工作。

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='}

From here, just use these parameters in a browser eg 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_signature=kGSLCZjYzAHXsa8f9sL52Kq1F2w=

生成“oauth_token_secret=37VZKRV3fXRLAw5tekZD2bwnMhXqGwgx&oauth_token=LRnexBGTNC4nDXpv9M&oauth_callback_confirmed=true”

正如 Martin 指出的那样,在示例代码或 URL 中省略“/”将使签名“无效”。

于 2011-02-08T07:02:35.280 回答