【问题标题】:“Invalid signature”: oAuth provider with Django-piston revisited using Scribe as a client“无效签名”:使用 Scribe 作为客户端重新访问带有 Django 活塞的 oAuth 提供程序
【发布时间】:2017-10-18 23:48:54
【问题描述】:

因此,在使用 Django-Piston 实现 OAuth 时,我遇到了这里提到的错误:"Invalid signature": oAuth provider with Django-piston

之前发布的解决方案对我不起作用,因此我开始深入研究 Piston (https://bitbucket.org/jespern/django-piston/overview) 和 Scribe (https://github.com/fernandezpablo85/scribe-java)。

事实证明,当使用 JSON 字符串有效负载对 Scribe 请求进行签名时,实际上仅对 OAuth 参数进行了签名。这会导致 Piston 签名验证失败,因为 Piston 对负载中的所有参数以及 OAuth 参数进行签名。

我能够将 Piston 修改为仅对 OAuth 参数进行签名,现在一切正常。作为 OAuth 的新手,我不确定这是否是正确的修复,一种替代方法是修改 Scribe 以对有效负载内容也进行签名(或者可能将每个参数附加到有效负载中,而不是将其作为字符串附加)。

有没有人知道解决这个问题的正确方法?

【问题讨论】:

    标签: java django oauth scribe django-piston


    【解决方案1】:

    OAuth 规范没有说明有效载荷(不是参数)。一些提供商会签署它,但这取决于他们。不在 Scribe 中签署正文内容(xml、json 等),这是一个设计决定,不会改变。

    【讨论】:

      【解决方案2】:

      如果我做出了正确的决定,这里是我对活塞的修复: 在 OAuthRequest(object) 类中添加此方法:

          def get_oauth_parameters(self):
          """Get any OAuth parameters."""
          parameters = {}
          for k, v in self.parameters.iteritems():
              # Ignore oauth parameters.
              if k.find('oauth_') > -1:
                  parameters[k] = v
          return parameters
      

      并修改这个以调用新方法:

          def get_normalized_parameters(self):
          """Return a string that contains the parameters that must be signed."""
          params = self.get_oauth_parameters()
          try:
              # Exclude the signature if it exists.
              del params['oauth_signature']
          except:
              pass
          # Escape key values before sorting.
          key_values = [(escape(_utf8_str(k)), escape(_utf8_str(v))) \
              for k,v in params.items()]
          # Sort lexicographically, first after key, then after value.
          key_values.sort()
          # Combine key value pairs into a string.
          return '&'.join(['%s=%s' % (k, v) for k, v in key_values])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-29
        • 1970-01-01
        • 1970-01-01
        • 2013-12-21
        • 1970-01-01
        • 2021-05-18
        相关资源
        最近更新 更多