代码之家  ›  专栏  ›  技术社区  ›  Abdul Baig

OAuth1拒绝令牌401未经授权

  •  2
  • Abdul Baig  · 技术社区  · 6 年前

    OAuth1.0的获取访问令牌请求在从授权URL重定向回magent1.9后仅起一次作用。下次请求访问令牌时,我会得到拒绝令牌。 我注意到两个对象的签名都有区别。

    请求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(消费者数据)
    OAuth::RequestToken.From_哈希(一些_哈希)
    请求_token.get_access_token(oauth_verifier:'asdfasdagbadbv')
    

    有签名的

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

    这可能是或可能不是问题所在,但这是迄今为止我在这两个请求中发现的唯一区别。 请有人帮我更新 oauth_nonce signature 或者设计其他解决方案。

    1 回复  |  直到 6 年前
        1
  •  1
  •   wasipeer    6 年前

    问题 在第二行。

     request_token.get_access_token(oauth_verifier: 'asdfasdfa')
    

    根据 Auth 文档请求令牌应一次性使用。一旦我们使用令牌,请求令牌就会过期。您正在第二次调用中使用过期的请求令牌 这导致拒绝令牌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' })
    
    推荐文章