【问题标题】:Restsharp oAuth 2 legged auth error : Invalid signature for signature method HMAC-SHA1Restsharp oAuth 2 legged auth 错误:签名方法 HMAC-SHA1 的签名无效
【发布时间】:2015-04-08 01:36:13
【问题描述】:

我们正在使用支持 OAuth 2 有腿身份验证的 API。尝试运行我的休息锐客户端 OAuth1Authenticator 实现时,我在下面收到此错误:

消息:HTTP 状态 401 - 签名方法 HMAC-SHA1 的签名无效

说明:此请求需要 HTTP 身份验证(无效 签名方法 HMAC-SHA1) 的签名。

这里是sn-p的代码:

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 来传递它。

有人能指出正确的方向吗?

更新

有趣的是,当我使用下面的自定义 OAuthBase 类来签署请求时。它运作良好。 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs

我真的很想在不编写任何自定义代码的情况下使用 RestSharp。不知道我到底做错了什么。

【问题讨论】:

  • 这看起来很有趣drupal.org/node/1991416 它的drupal 但要点是签名不匹配,因为服务器和客户端使用不同的哈希机制
  • 查看了您的链接,但我无法将这个重新锐化问题联系起来。谢谢。
  • 你看过第一条评论了吗?要点是检查服务器和客户端的签名是否使用相同
  • 这里的问题是我无法发送签名。我只有消费者密钥和密钥。不知道如何使用 RestSharp 传递签名
  • 这个链接有帮助吗? stackoverflow.com/questions/26954935/…

标签: c# security oauth restsharp


【解决方案1】:

您正在为您的访问令牌和访问令牌秘密传递空字符串。

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

查看RestSharp test example 确保提供了值。尝试使用该网站作为模板,看看填充这些值是否有帮助。

【讨论】:

  • 我们的提供商不提供这些额外的参数。根据我上次的更新,OAuthBase.cs 可以为其他两种方法传递空值。
猜你喜欢
  • 1970-01-01
  • 2011-05-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多