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

Tom*_*enn 4 .net c# restsharp oauth-2.0

我已经实现了自己的自定义IAuthenticator调用OAuth2BearerAuthenticator,该自定义基本上接收一个ClientIdClientSecret在发出任何请求之前,它会检查它是否具有有效的Bearer令牌-如果没有,它将使用客户端凭据消失并在继续操作之前“刷新”该令牌。原始请求。

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));
}
Run Code Online (Sandbox Code Playgroud)

我已经验证了它生成的载体令牌有效-我可以使用DHC(Chrome REST扩展)中的相同载体令牌授权标头从尝试访问的API成功请求数据

我还证实了if (any authorization paramaters)声明没有早日返回。

但是,RestSharp的响应失败 "HTTP Basic: Access denied.\n"

我不知道它是否相关,但响应中还包含WWW-Authenticate带有值的标头Basic realm=\"Web Password\"

任何帮助深表感谢。谢谢。

小智 20

此外,对于不记名令牌,您可以使用现有的身份验证器之一:

client.Authenticator = new JwtAuthenticator(yourAccessToken);
Run Code Online (Sandbox Code Playgroud)

或者:

client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(yourAccessToken, "Bearer");
Run Code Online (Sandbox Code Playgroud)


小智 10

我认为,如果您使用的是承载令牌来验证您的请求,则可以使用以下方式:

client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", bearerToken));
Run Code Online (Sandbox Code Playgroud)

希望它能工作!