2015-04-05 35 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