使用 RESTSHARP 的 OAuth 2 身份验证不起作用

Posted

技术标签:

【中文标题】使用 RESTSHARP 的 OAuth 2 身份验证不起作用【英文标题】:OAuth 2 authentication with RESTSHARP doesn't work 【发布时间】:2018-06-05 15:46:25 【问题描述】:

我正在尝试使用 Restsharp(版本 105,也尝试过最新的 106)连接到 REST API。身份验证方法是 OAuth 2

我从身份验证服务获得了一个令牌,但我无法使用它。 输出请求总是跳过 Authorization 参数。

请求应包含参数,如 授权:Bearer token1235

POST /wares/ HTTP/1.1

HTTP headers:
Accept: application/json
User-Agent: RestSharp/105.0.1.0
Host: localhost
Authorization: Bearer token1235
Accept-Encoding: gzip, deflate

Request body:

但是每次都会跳过请求中的授权行。 我尝试了各种方法,但完全不成功。 Restsharp 正在处理我分配的参数。 如何在 header 中包含 Authorization 参数和不记名令牌? 猜测它一定是相当标准的程序。

我尝试了许多在其他线程中提出的类似问题的可能性,但根本没有成功。 例如,我希望其中一个应该可以工作,但它不会:

    client.Authenticator = new OAuth2UriQueryParameterAuthenticator(AccessToken); // 这确实会在请求正文中写入 'oauth_token=token12345' 文本,但仅此而已

    request.AddParameter("Authorization", "Bearer" + AccessToken, ParameterType.HttpHeader); // 这确实在请求中不包含任何内容,根本没有参数

    request.AddHeader("Authorization","Bearer" + AccessToken); // 这确实在请求中不包含任何内容,根本没有参数

【问题讨论】:

管理员,请删除这个问题,因为,实际上提到的方法确实有效,我在转储标题内容的过程中遇到了问题。我已经使用 php 文件进行转储,但它并没有像原来那样产生标题。 【参考方案1】:

根据您期望的格式,您要使用 JWT。

使用 RestSharp 的方法是:

client.Authenticator = new JwtAuthenticator(accessToken);

这个验证器产生你想要的授权头:

Authorization: Bearer accessToken

【讨论】:

感谢您的建议。我在请求转储方法中遇到了主要问题。我使用 PHP 作为转储方法,当直接通过 Wireshark 查看时,授权标头就在那里!非常感谢。

以上是关于使用 RESTSHARP 的 OAuth 2 身份验证不起作用的主要内容,如果未能解决你的问题,请参考以下文章

RestSharp OAuth2 承载身份验证失败,访问被拒绝

如何在 RestSharp 中使用 OAuth2

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

RestSharp - 授权标头未涉及 WCF REST 服务

使用 Laravel API 实现 OAuth 2.0 身份验证

使用 oauth 2.0 和 wicket 实现身份验证