Nil Pun
Nil Pun

Reputation: 17383

Restsharp oAuth 2 legged auth error : Invalid signature for signature method HMAC-SHA1

We are consuming an API which supports OAuth 2 legged authentication. I'm getting this error below when trying to run my rest sharp client OAuth1Authenticator implemenation:

Message: HTTP Status 401 - Invalid signature for signature method HMAC-SHA1

Description: This request requires HTTP authentication (Invalid signature for signature method HMAC-SHA1).

Here's the code snippet:

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);

It appears to me that we need to pass the signature with request. But just haven't figured out how to pass this using RestSharp.

Could someone point me to right direction?

UPDATE

Interestingly when I used custom OAuthBase class below for signing the request. It works well. http://oauth.googlecode.com/svn/code/csharp/OAuthBase.cs

I really would like to use RestSharp without writing any custom code. Not sure what exactly am I doing wrong.

Upvotes: 2

Views: 1845

Answers (1)

Brian from state farm
Brian from state farm

Reputation: 2896

You are passing in empty strings for your access token and access token secret.

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

Looking at a RestSharp test example it is making sure that the values are provided. Try using that site as a template and see if populating those values helps.

Upvotes: -2

Related Questions