3

我正在尝试使用 2legged oauth 对 Web 服务进行身份验证。我有下一个使用路标库创建经过身份验证的 URL 的 Java 示例:

 String consumerKey = "KEY";
 String consumerSecret = "SECRET";
 DefaultOAuthConsumer consumer = new DefaultOAuthConsumer(consumerKey, consumerSecret);
 consumer.setTokenWithSecret(consumerKey, consumerSecret);
 return consumer.sign(targetUrl);

这会生成一个这样的 URL

http://example.com/my/method?oauth_consumer_key=KEY&oauth_nonce=4779611081457530684&oauth_signature=v19lL74VVMTibCMja5vnwIE2q5g%3D&oauth_signature_method=HMAC-SHA1&oauth_timestamp=1368778106&oauth&1.token=KEY

我正在尝试使用 ruby​​ 的oauth重新创建它。我的代码现在看起来像这样:

consumer = OAuth::Consumer.new(@creds[:key], @creds[:secret],
                               :site => "URL",
                               :scheme => :query_string)
token = OAuth::AccessToken.new(consumer)
token.get "METHOD"

并生成如下 URL:

http://example.com/my/method?oauth_signature_method=HMAC-SHA1&oauth_nonce=7eQe4cAE27uBE9Bftfx7Pcjj1kqfuXHPWt5d3NZw0&oauth_version=1.0&oauth_consumer_key=KEY&oauth_timestamp=1368778250&oauth_signature=EbM0BjseC1zB

但我总是收到未经授权的错误,即使我手动将 oauth_token 设置为密钥(就像路标一样)。看起来随机数无效,但它们都是 oauth 的有效库

谁能帮我?

提前致谢

4

1 回答 1

3

我对 2-legged oauth 也有同样的问题,我修复了:

consumer = OAuth::Consumer.new(key, secret, { :site => 'http://api.mysite.com' })
access_token = OAuth::AccessToken.from_hash(consumer, :oauth_token => key, :oauth_token_secret => secret)

常见问题来自不同步的时间戳

您的请求必须与服务器系统时钟同步,例如在linkedin 中必须在她的系统时钟的5 分钟内。

希望能帮助到你 ;)

于 2013-07-26T09:29:40.590 回答