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

h79rfbju  于 2023-10-15  发布在  其他
关注(0)|答案(2)|浏览(209)

我已经实现了自己的自定义IAuthenticator,称为OAuth2BearerAuthenticator,它基本上接受了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(Chrome REST扩展)中的相同承载令牌授权标头访问的API请求数据
我还验证了它没有从if (any authorization paramaters)语句中提前返回。
但是,RestSharp失败,响应为"HTTP Basic: Access denied.\n"
我不知道这是否相关,但响应还包含一个值为Basic realm=\"Web Password\"WWW-Authenticate标头
任何帮助都非常感谢。谢谢.

cclgggtu

cclgggtu1#

此外,对于Bearer token,您可以使用现有的身份验证器之一:

client.Authenticator = new JwtAuthenticator(yourAccessToken);

或者:

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

2o7dmzc52#

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

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

希望它工作!

相关问题