Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Sending OAuth token works in Postman but does not work in RestSharp

I tried to send a bearer token to an Auth0 API using Postman and it works perfectly.

I then tried the same using RestSharp (in c#) but it doesn't work at all.

Below is my code. I've tried many different formats but none of them work.. Is there any other way I can try to make it work?

var client = new RestClient("http://domain.auth0.com/api/v2/users");

RestRequest request = new RestRequest(Method.GET);
//request.AddHeader("authorization", "Bearer eyJhbGcJ9.eyJhdWQiOiJ6VU4hVWUE2.token");
//request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
//request.AddHeader("Accept", "application/json");


//RestClient client = new RestClient("http://domain.auth0.com");
//RestRequest request = new RestRequest("api/v2/users", Method.GET);

request.AddHeader("Content-Type", "application/x-www-form-urlencoded");
request.AddHeader("Accept", "application/json");
request.AddParameter("Authorization",
string.Format("Bearer " + "eyJhbGciOI1NiIsI9.eyJhdWQiOiWmVhTWpD2VycyI6eyJhY.token"),
            ParameterType.HttpHeader);

//request.AddParameter("Authorization",
//    String.Format("Bearer {0}", token),
//ParameterType.HttpHeader);
var response = client.Execute(request); 

PS: the token was changed.

like image 379
George Huang Avatar asked Oct 24 '25 15:10

George Huang


1 Answers

The problem is that you're using an HTTP URL. When you issue the first request the token is included, but you receive a redirect response informing that you should be calling the HTTPS endpoint.

Since RestSharp will not include the token in the second request performed automatically due to the first redirect response you get an unauthorized response.

You need to update the URL to be HTTPS which will prevent the redirect and as a consequence solve your problem. If you want to make multiple authenticated request using the same client you also change your code to be:

using RestSharp;
using RestSharp.Authenticators;

class Program
{
    static void Main(string[] args)
    {
        // Use the HTTPS scheme
        var client = new RestClient("https://[domain].auth0.com/api/v2/users");

        client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(
            "eyJhbGciJIUz.eyJhdWQi4QW5OXhCNTNlNDdjIn0.vnzGPiWA", // Update the token
            "Bearer");

        var request = new RestRequest(Method.GET);

        IRestResponse response = client.Execute(request);

        Console.WriteLine("{0}", response.StatusCode);
    }
}

If you really need to handle redirects and still send the token, check: https://github.com/restsharp/RestSharp/issues/414

like image 119
João Angelo Avatar answered Oct 26 '25 21:10

João Angelo