【问题标题】:"Invalid signature": oAuth provider with Django-piston“无效签名”:带有 Django-piston 的 oAuth 提供程序
【发布时间】:2010-05-29 14:32:32
【问题描述】:

我正在使用 django-piston 尝试创建一个支持 oAuth 的 API。

我开始使用以下教程:

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

我在活塞的管理界面中添加了一个消费者,其密钥和秘密都设置为“abcd”以进行测试。

网址已成功连接,并调用了 oAuth 提供程序。

但是,使用 tripit (python get_request_token.py "http://127.0.0.1:8000/api" abcd abcd) 运行我的获取请求令牌测试时,我收到以下错误:

签名无效。预期签名 基本字符串: 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 P>

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

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

返回 false。但是,我不知道如何验证签名。

有什么想法吗?

更新:

如果我从活塞的后端删除测试消费者,返回的响应会正确设置为“无效消费者”,因此此查找似乎有效。

【问题讨论】:

    标签: django oauth django-piston


    【解决方案1】:

    我找到的最终答案是将 oauth_consumer 的工作副本安装到应用程序目录中。一旦我在这个应用程序中添加了我的消费者,一切都按预期工作。

    【讨论】:

    • ...此外,另一个问题是 URL 末尾所需的“/”之间的差异;请求中额外的 %2F 会使签名无效。
    【解决方案2】:

    @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_signature=kGSLCZjYzAHXsa8f9sL52Kq1F2w=

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-10-23
      • 1970-01-01
      • 1970-01-01
      • 2012-12-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多