我已经实现了我自己的自定义IAuthenticator
,称为OAuth2BearerAuthenticator
,基本上接受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));
}
我已经验证了它生成的承载令牌是有效的 - 我可以成功地从我尝试使用DHC中的相同承载令牌授权头访问的API中请求数据(Chrome REST扩展)
我还证实它没有从if (any authorization paramaters)
声明中提前返回。
但是,RestSharp因响应"HTTP Basic: Access denied.\n"
而失败
我不知道它是否相关,但响应还包含一个值为WWW-Authenticate
的Basic realm=\"Web Password\"
标头
任何帮助深表感谢。谢谢。
我想如果您正在使用不记名令牌来验证您的请求,您可以使用这种方式:
client.AddDefaultHeader("Authorization", string.Format("Bearer {0}", bearerToken));
希望它有效!