Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# RestSharp OAuth2承载身份验证失败,访问被拒绝_C#_.net_Oauth 2.0_Restsharp - Fatal编程技术网

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");