【发布时间】: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