使用 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 承载身份验证失败,访问被拒绝
发送 OAuth 令牌在 Postman 中有效,但在 RestSharp 中无效
RestSharp - 授权标头未涉及 WCF REST 服务