2

我找到了解决此问题的方法,但是当我使用空的 Authorization 标头发出 GET 请求时,我有一个带有服务器的客户端会引发 400 错误。当没有授权标头时,它工作得很好。我想解释\或解决问题,而不是仅仅说我解决了它。

我的旧代码是这样的:

    request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"] ?? string.Empty;
    request.GetResponse();

我切换到这个:

    if (_Request.ServerVariables["HTTP_AUTHORIZATION"] != null)
    {
        request.Headers["Authorization"] = _Request.ServerVariables["HTTP_AUTHORIZATION"];
    }
    request.GetResponse();
4

1 回答 1

1

您可能希望看到这个问题:什么是 HTTP_AUTHORIZATION 环境变量?

本质上,当您传递 Authorization 标头时,服务器应该使用它来测试用户是否有权访问底层资源。通过发送带有空白值的标头,您实际上是在告诉服务器使用空白凭据......这是失败的。

当您不发送 Authorization 标头时,服务器会尝试使用它的默认凭据来获取资源,然后通过。

这应该工作的方式是:

  1. 客户端请求资源。
  2. 服务器尝试传递资源。如果需要额外的授权,则 401 标头会与 WWW-Authenticate 标头一起发回。
  3. 客户端提示用户输入凭据并重新提交带有授权标头的请求。
  4. 服务器验证授权,如果成功,则交付资源。如果不成功,它将再次发送 401。

仅当远程服务器使用 401 和 WWW-Authenticate 标头响应初始请求时,您的代码才应发送 Authorization 标头。否则不应发送该标头。

更多信息请访问:http ://en.wikipedia.org/wiki/Basic_access_authentication

于 2013-11-14T02:03:53.513 回答