发送OAuth令牌可以在Postman中使用,但在RestSharp中不起作用

时间:2017-01-27 17:01:39

标签: oauth-2.0 restsharp auth0

我尝试使用Postman将一个持有者令牌发送到Auth0 API,它完美无缺。

然后我使用RestSharp(在c#中)尝试了相同的操作,但它根本不起作用。

以下是我的代码。我尝试了很多不同的格式,但没有一种可以工作..有没有其他方法可以让它发挥作用?

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:令牌已更改。

1 个答案:

答案 0 :(得分:2)

问题是您使用的是HTTP网址。当您发出第一个请求时,会包含令牌,但您会收到重定向响应,通知您应该调用HTTPS端点。

由于第一次重定向响应,RestSharp将不会在第二个请求中包含令牌,因此会收到未经授权的响应。

您需要将网址更新为 HTTPS ,这会阻止重定向,从而解决您的问题。如果您想使用同一客户端进行多个经过身份验证的请求,您还需要将代码更改为:

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

如果您确实需要处理重定向并仍然发送令牌,请检查:https://github.com/restsharp/RestSharp/issues/414