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

时间:2015-04-27 10:53:31

标签: c# .net oauth-2.0 restsharp

我已经实现了我自己的名为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中的相同承载令牌授权标头访问的API中请求数据(Chrome REST扩展)

我还确认它没有从if (any authorization paramaters)声明提前返回。

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

而失败

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

非常感谢任何帮助。感谢。

2 个答案:

答案 0 :(得分:9)

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

client.Authenticator = new JwtAuthenticator(yourAccessToken);

或者:

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

答案 1 :(得分:4)

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

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

希望它有用!