繁体   English   中英

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

[英]RestSharp OAuth2 Bearer Authentication Failing With Access Denied

我已经实现了我自己的名为OAuth2BearerAuthenticator的自定义IAuthenticator ,它基本上接受ClientIdClientSecret并且在发出任何请求之前,它会检查它是否具有有效的承载令牌 - 如果没有,它将使用客户端凭据消失并“刷新”令牌,然后再继续原始请求。

此自定义身份验证器的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 中的相同不记名令牌授权标头访问的 API 请求数据(Chrome REST 扩展)

我还验证了它没有从if (any authorization paramaters)语句中提前返回。

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

我不知道它是否相关,但响应还包含一个WWW-Authenticate标头,其值为Basic realm=\\"Web Password\\"

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

我认为如果您使用不记名令牌来验证您的请求,您可以使用这种方式:

client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", bearerToken));

希望它起作用!

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

client.Authenticator = new JwtAuthenticator(yourAccessToken);

或者:

client.Authenticator = new OAuth2AuthorizationRequestHeaderAuthenticator(yourAccessToken, "Bearer");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM