为什么AuthenticationHeaderValue需要方案

本文关键字:方案 AuthenticationHeaderValue 为什么 | 更新日期: 2023-09-27 18:12:21

我正在按以下方式设置HttpClient的授权头:

httpClient
    .DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(null, "abc");

…但是我得到了一个例外:

AuthenticationHeaderValue的scheme不能为空。

为什么AuthenticationHeaderValue必须有方案?这是特定RFC所要求的吗?

为什么AuthenticationHeaderValue需要方案

该方案用于确定您正在使用的身份验证类型:

    基本
  • Oauth
  • 无记名
  • 等。

标题看起来像这样:

{
   "key": "Authorization",
   "value": "<scheme> <parameter>"
}

尝试使用Postman查看基于HTTP支持的不同类型的身份验证生成的内容

有时您无法使用方案设置授权头。这也是我现在正在做的一个项目的情况。我需要从TOPdesk连接到API,但是没有指定方案。

来自TOPdesk的授权头必须有一个像TOKEN id="0d1739df-8952-41c0-94cd-b25287446b22"这样的值,所以我不能使用方案。我通过添加Authorization头解决了这个问题,就像下面的例子一样,效果非常好。

client.DefaultRequestHeaders.Add("Authorization", $"TOKEN id='"{token}'"");

对我来说,我需要的授权令牌只是一个base64编码的字符串,没有方案。

示例:授权:SnVzdCBhIGR1bW15IHRva2Vu"。我所连接的API端点拒绝接受类似"基本"这样的方案。或者其他任何东西。我不得不使用:

HttpRequestMessage hrMessage = new HttpRequestMessage ();
hrMessage.Headers.TryAddWithoutValidation("Authorization", "SnVzdCBhIGR1bW15IHRva2Vu");