前言:我是一名 Web 开发人员,非常了解 Apache 服务器,但我对 IIS 或 .NET 知之甚少
我与一位开发人员合作,他一段时间以来一直在避免向运行 IIS 的登台服务器添加基本身份验证的请求。今天他终于添加了,但是添加了消息
IIS 不允许您同时使用基本身份验证和表单身份验证。
我通过安装第 3 方进程来解决这个问题,该进程允许您在 iis 模块前面使用 .htaccess/apache 模块。
根据要求,它会占用更多资源,但对于暂存来说并不是很重要。
我的问题是(因为这个解释与我所知道的关于网络应用程序和职责分离的一切背道而驰)IIS 怎么可能阻止在为其用户使用自定义表单身份验证的网站上使用基本身份验证?
基本身份验证是一个术语,通常指的是 HTTP 协议中的身份验证。
基于表单的身份验证是在基于 Web 的应用程序的上下文中处理的。这通常涉及一个表单,该表单使用 cookie 设置某种会话标识符,然后当表单被处理时,信息与服务器端关于用户状态的会话相关联。
基本上通过会话 cookie 跟踪的基于表单的身份验证与实际上直接在 HTTP 标头中的基于 HTTP 的身份验证之间确实没有任何直接关系。
它与 IIS 阻止基本身份验证无关,它与两者不兼容有关。如果您使用表单进行初始身份验证,则关联的登录状态将存储在会话中。但是处理基本身份验证的软件通常不知道有关 cookie 或会话的任何信息,它只知道 HTTP 身份验证。当您让 IIS 执行身份验证时,身份验证甚至在您的应用程序被触及之前就发生了。
如果您使用 IIS 的内置功能进行基本身份验证,那么您基本上只能使用它。
但是,通过让您的应用程序发送和解析正确的 HTTP 标头,应该可以在您的应用程序中实现 HTTP 身份验证。为此,您可以将 IIS 设置为基于表单的身份验证,然后您只需在应用程序中执行所有操作即可。这样,您的应用程序就可以根据会话状态发送正确的标头。