Java “;无效签名”;:使用Scribe作为客户端重新访问带有Django活塞的oAuth提供程序
因此,在使用Django活塞实现OAuth时,我遇到了这里提到的错误: 之前发布的解决方案对我不起作用,所以我开始深入研究活塞()和划线() 事实证明,当使用JSON字符串负载对Scribe请求进行签名时,实际上只对OAuth参数进行签名。这会导致活塞签名验证失败,因为活塞对有效负载中除OAuth参数外的所有参数进行签名 我能够修改活塞,只签署OAuth参数,现在一切正常。作为OAuth的新成员,我不确定是否是正确的修复方法,一种替代方法是修改Scribe以对有效负载内容进行签名(或者可能在有效负载中附加每个参数,而不是将其作为字符串附加)Java “;无效签名”;:使用Scribe作为客户端重新访问带有Django活塞的oAuth提供程序,java,django,oauth,scribe,django-piston,Java,Django,Oauth,Scribe,Django Piston,因此,在使用Django活塞实现OAuth时,我遇到了这里提到的错误: 之前发布的解决方案对我不起作用,所以我开始深入研究活塞()和划线() 事实证明,当使用JSON字符串负载对Scribe请求进行签名时,实际上只对OAuth参数进行签名。这会导致活塞签名验证失败,因为活塞对有效负载中除OAuth参数外的所有参数进行签名 我能够修改活塞,只签署OAuth参数,现在一切正常。作为OAuth的新成员,我不确定是否是正确的修复方法,一种替代方法是修改Scribe以对有效负载内容进行签名(或者可能在有效
有人知道解决这个问题的正确方法吗?如果我做出了正确的决定,这里是我对活塞的修复方法: 在类OAuthRequest(对象)中添加此方法:
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])
OAuth规范没有说明任何关于有效负载的内容(不是参数)。一些供应商确实签署了协议,但这取决于他们。在Scribe中不签署正文内容(xml、json等),这是一个设计决策,不会改变