发送 OAuth 令牌在 Postman 中有效,但在 RestSharp 中无效

Posted

技术标签:

【中文标题】发送 OAuth 令牌在 Postman 中有效,但在 RestSharp 中无效【英文标题】:Sending OAuth token works in Postman but does not work in RestSharp 【发布时间】:2017-06-13 10:44:09 【问题描述】:

我尝试使用 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】:

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

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

您需要将 URL 更新为 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

【讨论】:

谢谢 João :-) 当我更改为 https 时。我的 statusCode 中有一个“错误请求”。我从 Web 应用程序更改为控制台应用程序,但仍然得到相同的结果。我应该尝试其他方法吗?我错过了什么吗? 我使用有效令牌针对我的 Auth0 帐户测试了上述代码,并且它工作正常。确保您使用最新的 RestSharp 版本和完全相同的代码。如果错误请求继续存在,请尝试包含有关返回响应的更多信息。 在没有重定向的情况下也会发生这种情况。也许是在集群中工作的不同 Web 前端服务器,我不知道。请求 Auth Token 在 Postman 和 RestSharp 中产生相同的结果,但它只在 Postman 中有效,原因不明。 对不起,我错了。重定向到同一资源,但缺少尾部斜杠。问题解决了。谢谢

以上是关于发送 OAuth 令牌在 Postman 中有效,但在 RestSharp 中无效的主要内容,如果未能解决你的问题,请参考以下文章

当我在授权标头中发送有效的不记名令牌时,为啥我的 Spring-Cloud Gateway / OAuth2-Client 没有通过身份验证?

无法通过 Postman 在 Django oauth 工具包客户端凭据授予中获取访问令牌

无法在POSTMan上获取Google oAuth 2令牌

无法在 POSTMan 上获取 Google oAuth 2 令牌

如何从 Postman REST 客户端发送 spring csrf 令牌?

如何从Postman休息客户端发送spring csrf令牌?