RestSharp OAuth2 承载身份验证失败,访问被拒绝
Posted
技术标签:
【中文标题】RestSharp OAuth2 承载身份验证失败,访问被拒绝【英文标题】:RestSharp OAuth2 Bearer Authentication Failing With Access Denied 【发布时间】:2015-07-05 18:55:33 【问题描述】:我已经实现了我自己的自定义IAuthenticator
,称为OAuth2BearerAuthenticator
,它基本上接受ClientId
和ClientSecret
,在发出任何请求之前,它会检查它是否具有有效的承载令牌——如果没有,它将使用客户端凭据消失并在继续原始请求之前“刷新”令牌。
此自定义身份验证器的Authenticate
方法包含以下内容:
public void Authenticate(IRestClient client, IRestRequest request)
if (!bearerTokenExpiration.HasValue || bearerTokenExpiration.Value < DateTime.Now)
RefreshBearerToken();
if (request.Parameters.Any(p => p.Name.Equals("Authorization", StringComparison.OrdinalIgnoreCase)))
return;
request.AddHeader("Authorization", string.Format("Bearer 0", bearerToken));
我已验证它生成的不记名令牌是有效的 - 我可以成功地从我尝试使用 DHC(Chrome REST 扩展)中相同的不记名令牌授权标头访问的 API 请求数据
我还验证了它不会从if (any authorization paramaters)
语句中提前返回。
但是,RestSharp 因响应 "HTTP Basic: Access denied.\n"
而失败
我不知道它是否相关,但响应还包含一个 WWW-Authenticate
标头,其值为 Basic realm=\"Web Password\"
非常感谢任何帮助。谢谢。
【问题讨论】:
【参考方案1】:此外,对于 Bearer 令牌,您可以使用现有的身份验证器之一:
client.Authenticator = new JwtAuthenticator(yourAccessToken);
或者:
client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(yourAccessToken, "Bearer");
【讨论】:
【参考方案2】:我认为如果您使用不记名令牌来验证您的请求,您可以使用这种方式:
client.AddDefaultHeader("Authorization", string.Format("Bearer 0", bearerToken));
希望它成功!
【讨论】:
request.AddHeader("Authorization", string.Format("Bearer 0", bearerToken));以上是关于RestSharp OAuth2 承载身份验证失败,访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章
记录 Spring Security OAuth2 身份验证失败的推荐方法是啥?
使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]