使用IIS7.5和Windows身份validation解决访问问题

我正在IIS 7.5服务器(Win Server 2008 R2)上安装Web应用程序,并且遇到了Windows身份validation问题。 我已经做了这个安装几十次,但这个有我卡住,所以任何build议非常欢迎。

概要

只有pipe​​理员可以通过Windows身份validation连接到我的网站,但我希望所有用户都能通过身份validation。 pipe理员可以通过本地主机和另一台工作站从机器连接两者。 其他用户将被提示input凭据,而不是自动进行身份validation,并被拒绝访问。 这是尽pipe给每个人完全控制的网页目录。

详细情况

  • 使用作为NETWORK SERVICE运行的应用程序池创buildWeb应用程序。 已启用Windows身份validation,所有其他人禁用 Windows身份validation具有内核模式= true(即默认的IIS),并提供者是命令NTLM,协商(尽pipe我也尝试了另一种方式)。 所有login都在同一个域上,而Web服务器在该域上。

  • 应用程序安装在C:\MyApplication\App\

  • 当login到服务器(作为pipe理员帐户),我可以导航到http://localhost/MyApp并自动进行身份validation。

  • login到服务器(作为pipe理员帐户)时,我导航到http://webserver.full.domain.com/MyApp并提示input凭据。 input3次后,我得到401.1未经授权的页面。

  • 以常规用户帐户login到工作站时,导航到http://webserver/MyApp提示input凭据3次,然后显示“拒绝访问”消息。

  • 当以服务器上的pipe理员帐户login到工作站时,我也可以导航到http://webserver/MyApp并自动进行身份validation。 使用其他帐户login不起作用。 这似乎对我来说特别怪异,这表明它只是关于权限…但权限似乎很好?!

  • 即使在本文中启用了详细的Kerberos日志logging,也没有logging到安全事件日志的故障。

  • SPN似乎设置正确,因为我从另一台机器上使用了“setspn -L servername”,并看到两个条目HOST/servernameHOST/servername.full.domain.com

  • 服务器上还有另一个应用程序,作为NETWORK SERVICE运行,在IIS中使用匿名身份validation,然后使用SQL集成安全性连接到SQL Server。 它不使用模拟,因此连接到SQL Server作为机器身份DOMAIN\SERVER$ 。 这工作正常。 我提到这一点,因为它表明该机器在域上没有根本问题,因为它的身份被SQL Server接受。

  • 我已将NETWORK SERVICE完全控制权授予应用程序所在的Web服务器文件夹( C:\MyApplication\ )。 我已经给了authentication的用户读/列表/执行权限。 来自工作站的Internet Explorer正确识别在Intranet区域中的http://webserver/MyApp

  • Internet Explorer启用了Windows身份validation。

  • 我也尝试创build另一个虚拟目录到C:\MyApplication\test ,其中包含test.html中的单个文件,同时也启用了Windows身份validation,并且还具有适当的权限。 同样的症状,但我得到401.2未经授权,而不是401.1。

  • 服务器最初没有安装IISangular色,所以我添加了这个。 我忘记了第一次select“Windows身份validation”,所以当我尝试为我的应用程序打开Windows身份validation时添加了此angular色服务。

  • 当我最初安装IISangular色并导航到http://localhost ,默认应用程序池停止,并显示服务器失败消息。 切换默认应用程序池作为networking服务运行解决了这个问题。 我现在想知道这是否意味着服务器上可能会导致我的身份validation问题的其他问题。 例如此修补程序 ,虽然运行NETWORK SERVICE时不应该影响我。

  • 以防万一,重新启动服务器并重新testing。 没有运气。

  • 创build一个testing文件c:\inetpub\wwwroot\testwwwroot\test.html ,仅在网站上设置Windows身份validation,并尝试从工作站访问它。 同样的症状。 因此,这是一个适用于wwwroot以及其他文件夹的问题。

  • 给每个人完全控制文件夹和重新testing,仍然没有访问权限。

  • 给最终用户完全控制文件夹和重新testing,仍然没有访问权限。

  • 从IE把该网站放入可信站点(而不是Intranet区域),并重新testing,没有运气。 删除所以它再次Intranet区域。

  • 将Intranet区域的IE设置更改为“使用用户名和密码自动login”,仍然无法访问。

  • 作为一个选项删除了谈判,所以它只会强制NTLM,仍然没有访问权限。

  • 使用http://<ipaddress>/Myapp从工作站进行testing,而不是服务器名称。 提示input凭据(预期),但在input正确的详细信息时提示3次,然后无法访问。

  • 尝试添加networking服务作为IIS_IUSRS组的成员(没有特别的理由为什么这可能有帮助),仍然没有访问。

  • 将默认应用程序池的身份从NETWORK SERVICE更改为ApplicationPoolIdentity。 从服务器导航到http://localhost并得到服务器错误。 在事件日志中有以下消息:

错误:应用程序池DefaultAppPool已被禁用。 Windows进程激活服务(WAS)在启动工作进程为应用程序池提供服务时遇到了故障。

警告:应用程序池DefaultAppPool的标识无效。 为身份指定的用户名或密码可能不正确,或者用户可能没有批处理login权限。 如果身份未被更正,应用程序池将在应用程序池收到第一个请求时被禁用。 如果批处理login权限导致该问题,则Windows进程激活服务(WAS)可以重试login之前,必须在授予权限后更改IISconfiguration存储中的标识。 如果在处理应用程序池的第一个请求之后身份保持无效,应用程序池将被禁用。 数据字段包含错误编号。

警告:应用程序池DefaultAppPool已被禁用。 Windows进程激活服务(WAS)没有创build工作进程来为应用程序池提供服务,因为应用程序池标识无效。

  • 将身份设置回networking服务解决了上述问题。 但是我想知道这是否相关。

  • 我使用F12开发工具来查看请求/响应标头:当从工作站进行testing时,服务器正在发送WWW-Authenticate: NegotiateWWW-Authenticate: NTLM 。 IE没有发送任何与请求头相关的WWW-Authenticate。 当从服务器上的IE进行相同的testing(它在那里进行正确的身份validation),响应头是WWW-Authenticate: Negotiate <then a long securitytoken like oRswGaADCg....>

  • 我比较了服务器的applicationHost.config文件和我的本地文件,没有看到任何明显的问题。 例如WindowsAuthenticationModule列出,所以它不是这个问题 。

我很坚持这个…

任何build议,我应该尝试或看看排除故障进一步非常感谢。

( 这里也发布在IIS论坛上 )

问题解决了。 客户端在错误的OU中创build了“计算机”帐户:它在“计算机OU”中而不是“服务器”中。 也许这意味着它有一些GPO设置,阻止访问非pipe理员帐户…或沿着这些线路的东西。

我将尝试在修复之前和之后获得gpresult.exe输出,以确定究竟是由什么原因引起的。

对于任何疑难解答类似的问题,我推荐这篇博文 。 它并没有为我解决这个问题,而是提到了查看Kerberos问题的各种有用的东西。

将服务器从.NET 4.5升级到.NET 4.6后,我发现了类似的问题。

在服务器上升级.NET后,我所有在IIS中的网站正在工作,现在停止与这个关于未经授权的访问401.2错误…等等等等。

“什么给了 – 他们在20分钟前工作。”

在IIS7中查看后,我注意到现在只有“匿名身份validation”启用,而不是正式被禁用,“Windows身份validation” 不再被启用 。 因此,我的网站只支持Windows身份validation的问题。

道德故事=双重检查IIS7中的身份validation模式

思考问题 :II7中的身份validation模式是如何全部重置为启用默认“匿名身份validation”的? 是否由于.NET 4.6的升级?