目标
我正在尝试部署需要 Windows 身份验证(特别是 Kerberos)的 MVC3 应用程序作为旧版 ASP.NET 匿名身份验证网站中的应用程序。
症状
在我的机器上的 IIS 7.5 Express 中,显然它运行得非常完美。当我将其部署到 IIS 7.5 作为自己的站点时,我收到了域凭据的质询,尽管没有一个被接受。当我将其部署为应用程序时,我从托管站点返回自定义错误页面。确认 - Kerbtray 在这两种情况下都没有显示票证。
详细信息
站点和新的子应用程序都在同一应用程序池上运行,并且应用程序池作为 AppPoolIdentity 运行。该内置 IIS 应用程序池帐户 (IIS AppPool\MyAppPoolName
) 具有站点和应用程序文件夹树的完整读取/执行权限。不使用任何模仿。
问题
- 要让 NTLM 和 Kerberos 在匿名身份验证站点内的应用程序上运行,我需要做些什么特别的事情吗?
如果没有,任何关于要查看的事物/位置的建议都会很棒 - ApplicationHost.config
和应用程序的 web.config
文件看起来不错。
编辑:为了澄清,这一切都发生在广泛使用 Kerberos 用于其他目的的公司网络上。 “站点”是指 IIS 网站,与必须托管在 IIS 站点内的“应用程序”不同。
最佳答案
经过更多研究后,我找到了答案:
在 IIS 7.5 上的匿名身份验证 IIS 站点中托管经过 Windows (Kerberos) 身份验证的 IIS 应用程序不需要任何特殊操作,只要:
a.内核模式身份验证已打开 - 无需 SPN。 b.该应用程序使用与托管父级相同的应用程序池标识。可以使用不同的应用程序池及其标识,但这确实需要进一步的 NTFS 权限,并且超出了此特定问题的范围。
我的错误问题更加简单但难以捉摸......父站点在 <HttpErrors>
中定义了一组自定义错误页面。包括 401 和 403 页面。
这是当用户从嵌套应用程序请求页面时返回的错误页面,因为 Kerberos 首先发送 401,以询问用户的凭据并要求/他获取并提供 Kerberos 票证...但是因为父站点返回 200 响应(自定义错误页面),用户从未获得 Kerberos 票证。
关闭这些功能后,用户现在可以适本地获取 Kerberos 票证并默认回退到 NTLM。
关于asp.net - 匿名访问站点内的 Kerberos 身份验证 MVC 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9611177/