C# RestSharp OAuth2承载身份验证失败,访问被拒绝
我已经实现了自己的自定义C# RestSharp OAuth2承载身份验证失败,访问被拒绝,c#,.net,oauth-2.0,restsharp,C#,.net,Oauth 2.0,Restsharp,我已经实现了自己的自定义iaauthenticator名为OAuth2BeareAuthenticator,它基本上接收ClientId和ClientSecret,在发出任何请求之前,它会检查它是否具有有效的承载令牌-如果没有,它将使用客户端凭据离开并“刷新”在继续原始请求之前,请先删除令牌 此自定义验证器的Authenticate方法包含以下内容: public void Authenticate(IRestClient client, IRestRequest request) {
iaauthenticator
名为OAuth2BeareAuthenticator
,它基本上接收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));
}
public void身份验证(IRestClient客户端,IRestRequest请求)
{
如果(!bearerTokenExpiration.HasValue | | bearerTokenExpiration.Valuep.Name.Equals(“Authorization”,StringComparison.OrdinalIgnoreCase)))
{
返回;
}
request.AddHeader(“Authorization”,string.Format(“Bearer{0}”,bearerToken));
}
我已经验证了它生成的承载令牌是有效的-我可以使用DHC(Chrome REST扩展)中相同的承载令牌授权头成功地从我尝试访问的API请求数据
我还验证了它没有从if(任何授权参数)
语句中提前返回
但是,RestSharp失败,响应为“HTTP Basic:访问被拒绝。\n”
我不知道它是否相关,但响应还包含一个WWW-Authenticate
标题,其值为Basic realm=\“Web密码\”
非常感谢您的帮助。谢谢。我认为,如果您使用承载令牌来验证您的请求,您可以使用以下方式:
client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", bearerToken));
希望它能起作用 此外,对于承载令牌,您可以使用一个现有的身份验证器:
client.Authenticator = new JwtAuthenticator(yourAccessToken);
或:
request.AddHeader(“Authorization”,string.Format(“Bearer{0}”,bearerToken));
client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(yourAccessToken, "Bearer");