c# - 空授权 header 会导致 400 错误。 IIS 7.5

标签 c# http iis bad-request

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

我的旧代码是这样的:

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

最佳答案

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

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

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

这应该是这样工作的:

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

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

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

关于c# - 空授权 header 会导致 400 错误。 IIS 7.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19968110/

相关文章:

c# - MVVM WPF 保存和加载用户设置设计模式

c# - 远程对象上的 DynamicInvoke 是否异步工作?

c# - 如何强制派生类重写仅返回其类名的方法?

ASP.NET 表单应用程序损坏自定义 URI 数据

iis - 通过代理重定向本地主机?

c# - 正则表达式停止除 _ 之外的特殊字符 not in start

http - 如何重写 Squid-Cache 内部 URL?

asp.net - 不使用 httpcontext 获取应用程序路径。 (asp.net)

javax.servlet.Filter用于特定的请求方法

.net - 将 misc 文件放在 bin 目录中是个坏主意