2013-05-17 69 views
3

我想通過使用2legged oauth來驗證一個webservice。我下一個工作Java示例使用signpost庫創建驗證網址:身份驗證到一個Oauth兩腳系統

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

而這會產生這樣的

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_token=KEY&oauth_version=1.0

的網址我試圖使用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=EbM0BjslzB5yXYWeC8EJGAEGi1k%3D

但我總是得到一個未經授權的錯誤,即使我手動設置的oauth_token關鍵(如路標做)。看起來nonce是無效的,但他們都是有效的庫oauth

任何人都可以幫助我嗎?

在此先感謝

回答

3

我一直同樣的問題與模式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分鐘內。

希望它有幫助;)