OAuth1 reject_token 401未经授权

时间:2018-11-28 15:06:10

标签: ruby-on-rails oauth magento-1.9 oauth-1.0a oauth-ruby

从授权URL重定向回后,OAuth1.0的获取访问令牌请求仅对Magento1.9起作用一次。下次请求访问令牌时,我会收到reject_token。 我注意到两个对象的签名都存在差异。

请求1(成功):

OAuth::Consumer.new(consumer_data)
OAuth::RequestToken.from_hash(some_hash)
request_token.get_access_token(oauth_verifier: 'asdfasdagbadbv')

具有签名

oauth_nonce=\"iIHmN7obLeONSitOxFFZQI71v0k4mAsEFLFen0Lw\", 
oauth_signature=\"lwj0n1AK3VJLdaXHIWEOFlYp5qc%3D\"

请求2(失败):

OAuth::Consumer.new(consumer_data)
OAuth::RequestToken.from_hash(some_hash)
request_token.get_access_token(oauth_verifier: 'asdfasdagbadbv')

具有签名

oauth_nonce=\"KciY4tiiPDu1u029Nbdu1C325svchfESTYV1l8mvw\", 
oauth_signature=\"KciY4tiiPt5Du1u029Nbdu1CzCHzvc%3D\"

这可能是问题,也可能不是问题,但这是我到目前为止在两个请求中发现的唯一区别。 请有人帮助我更新oauth_noncesignature或设计其他解决方案。

1 个答案:

答案 0 :(得分:1)

问题在第二行。

 request_token.get_access_token(oauth_verifier: 'asdfasdfa')

根据Auth文档,请求令牌应使用一次。一旦使用请求令牌,它们就会过期。您在第二个呼叫中使用了过期的请求令牌,这会导致未经授权的reject_token 401。

解决方案

实际上,请求令牌用于生成访问令牌。访问令牌可以多次使用。因此,您需要将访问令牌存储在第一行request_token.get_access_token(oauth_verifier: 'asdfasdfa')中生成的某个位置。然后,您可以在重置API调用时使用保存的访问令牌。使用访问令牌的语法如下:

@consumer = OAuth::Consumer.new(...)
@token = OAuth::Token.new('ACCESS_TOKEN', 'ACCESS_TOKEN_SECRET') // saved access token and secret here
@consumer.request(:post, '/people', @token, {}, @person.to_xml, { 'Content-Type' => 'application/xml' })