2015-04-05 105 views
2

我們正在使用支持OAuth 2 legged驗證的API。我越來越想經營我的休息鋒利的客戶OAuth1Authenticator時實行低於此錯誤:Restsharp oAuth 2 legged auth error:簽名方法HMAC-SHA1的簽名無效

消息:HTTP狀態401 - 簽名法HMAC-SHA1

說明無效簽名:該請求需要HTTP認證(簽名方法HMAC-SHA1的簽名無效 )。

下面的代碼片段:

var restClient = new RestClient(baseUrl); 
      restClient.Authenticator = 
       OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"], 
        ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty); 

      var request = new RestRequest(relativePath); 
      request.AddParameter(new Parameter { Name = "username", Value = username, Type = ParameterType.QueryString }); 
      request.AddParameter(new Parameter { Name = "firstname", Value = firstname, Type = ParameterType.QueryString }); 
      request.AddParameter(new Parameter { Name = "surname", Value = surname, Type = ParameterType.QueryString }); 
      request.AddParameter(new Parameter { Name = "email", Value = email, Type = ParameterType.QueryString }); 
      request.AddParameter(new Parameter { Name = "password", Value = password, Type = ParameterType.QueryString }); 


      request.Resource = string.Format(relativePath); 
      request.Method = Method.POST; 
      var response = restClient.Execute<object>(request); 

在我看來,我們需要與要求通過簽名。但是還沒有想出如何使用RestSharp來傳遞。

有人能指點我正確的方向嗎?

UPDATE

有趣的是,當我用下面定製OAuthBase類用於簽名請求。它運作良好。 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs

我真的很想在不寫任何自定義代碼的情況下使用RestSharp。不知道我到底做錯了什麼。

+0

這看起來很有趣https://www.drupal.org/node/1991416其drupal的要點是簽名不匹配,因爲服務器和客戶端使用不同的哈希機制 – 2015-04-05 03:15:24

+0

看看你的鏈接,但我無法涉及此resharp問題。謝謝。 – 2015-04-05 03:30:33

+0

您是否看過第一條評論?要點是檢查服務器和客戶端的簽名是否使用相同的 – 2015-04-05 03:32:40

回答

-2

您正在爲您的訪問令牌傳遞空字符串並訪問令牌密鑰。

restClient.Authenticator = 
      OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"], 
       ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty); 

看着RestSharp test example它確保提供的值。嘗試使用該網站作爲模板,看看填充這些值是否有幫助。

+0

我們的提供商不提供這些額外的參數。根據我上次的更新,OAuthBase.cs可以爲其他兩種方法傳遞空值。 – 2015-04-08 01:33:47