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

Posted

技术标签:

【中文标题】RestSharp OAuth2 承载身份验证失败,访问被拒绝【英文标题】:RestSharp OAuth2 Bearer Authentication Failing With Access Denied 【发布时间】:2015-07-05 18:55:33 【问题描述】:

我已经实现了我自己的自定义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" 而失败

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

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

【问题讨论】:

【参考方案1】:

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

client.Authenticator = new JwtAuthenticator(yourAccessToken);

或者:

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

【讨论】:

【参考方案2】:

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

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

希望它成功!

【讨论】:

request.AddHeader("Authorization", string.Format("Bearer 0", bearerToken));

以上是关于RestSharp OAuth2 承载身份验证失败,访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

使用RESTSHARP进行OAuth 2身份验证不起作用

Oauth2 身份验证失败

通过查询字符串传递“承载”时,SignalR 身份验证失败

记录 Spring Security OAuth2 身份验证失败的推荐方法是啥?

使用 Azure AD 承载令牌时身份验证失败,返回容器列表 [Azure Blob] [Azure AD OAuth 2.0] [REST API]

WSO2 APIM 的自定义身份验证