Restsharp oAuth 2 legged auth error:签名方法HMAC-SHA1的签名无效

时间:2015-04-05 02:45:53

标签: c# security oauth restsharp

我们正在使用支持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。不确定我到底做错了什么。

1 个答案:

答案 0 :(得分:-2)

您传入空字符串以获取访问令牌并访问令牌密钥。

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

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