我们正在使用支持OAuth 2版本身份验证的API。我在尝试运行其余的客户端OAuth1Authenticator实施时遇到此错误:
消息: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传递它。
有人能指出我正确的方向吗?
更新
有趣的是,当我使用下面的自定义OAuthBase类来签署请求时。它运作良好。 http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs
我真的想在不编写任何自定义代码的情况下使用RestSharp。不确定我到底做错了什么。
答案 0 :(得分:-2)
您传入空字符串以获取访问令牌并访问令牌密钥。
restClient.Authenticator =
OAuth1Authenticator.ForProtectedResource(ConfigurationManager.AppSettings["ConsumerKey"],
ConfigurationManager.AppSettings["ConsumerSecret"], string.Empty, string.Empty);
查看RestSharp test example,确保提供值。尝试将该网站用作模板,看看填充这些值是否有帮助。