空授权标头导致400错误。 IIS 7.5

时间:2013-11-14 01:58:30

标签: c# http iis bad-request

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

我的旧代码就是这样:

    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();

1 个答案:

答案 0 :(得分:1)

您可能希望看到此问题:What is the HTTP_AUTHORIZATION environment variable?

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

当您不发送授权标头时,服务器会尝试使用它的资源的默认凭据,该凭据通过。

这应该起作用的方式是:

  1. 客户请求资源。
  2. 服务器尝试传递资源。如果需要其他授权,则会使用WWW-Authenticate标头发回401标头。
  3. 客户端提示用户输入凭据,并使用授权标头重新提交请求。
  4. 服务器验证授权,如果成功,则传递资源。如果不成功,它将再次发送401。
  5. 如果远程服务器使用401和WWW-Authenticate标头响应初始请求,则您的代码应仅发送Authorization标头。否则不应发送该标题。

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