GetAsync 使用基本身份验证,即使我指定了 Bearer

Posted

技术标签:

【中文标题】GetAsync 使用基本身份验证,即使我指定了 Bearer【英文标题】:GetAsync using Basic Authentication even though I specify Bearer 【发布时间】:2021-01-19 23:11:15 【问题描述】:

我有以下GetAsync,我正在尝试使用不记名令牌进行身份验证,但我收到了 403 响应。当我查看请求标头时,我可以看到 Authorization: Basic YWJjOmRlZg==

var client = new HttpClient(handler)

    BaseAddress = new Uri("https://api.myendpoint.com/v2/")
;
client.DefaultRequestHeaders.Authorization =
                new AuthenticationHeaderValue("Bearer", "token");
var httpResponseMessage = _myclient.GetAsync("instruments?country=US&type=BOND").GetAwaiter().GetResult();

令牌有效。我向邮递员证实了这一点。我还将它硬编码为AuthenticationHeaderValue,以确保我拥有正确的令牌。我想我认为我错误地传递了不记名令牌。

如何让它使用 Bearer 身份验证?

【问题讨论】:

不确定您希望我们在这里提供什么帮助。我们不知道您正在与之交谈的 API 是如何工作的,也不知道您的令牌是否有效,也不知道为生成该令牌而提供的凭据是否允许您访问您尝试使用的资源。 令牌变量在哪里? 我在关于令牌的问题中添加了一些内容。 @runnerpaul 给出的答案确实解决了你的问题? 【参考方案1】:

将令牌传递给标头(我目前正在使用此):

client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", token);

或类似的东西:

client.DefaultRequestHeaders.Add("Authorization", "Bearer " + token);

【讨论】:

【参考方案2】:

服务器抛出 HTTP 403 Forbidden 响应,因为它拒绝授权您的请求。这可能意味着您的不记名令牌中缺少某些声明或特定声明值。

【讨论】:

以上是关于GetAsync 使用基本身份验证,即使我指定了 Bearer的主要内容,如果未能解决你的问题,请参考以下文章

GetAsync 导致超时问题

即使在 IDP 使用 SAML 成功登录后,获取身份验证对象仍为空

Spring MVC REST + Spring Security + 基本身份验证

使用 AngularJS 拦截器阻止 HTTP 基本身份验证对话框

Javascript 清理缓存以清除基本身份验证凭据

错误 403:“请求的身份验证范围不足”,即使相关范围已激活