我一直试图通过Google
解决这个问题几个星期并阅读SO,但没有太多运气,所以我想我终于试着问自己了。
我在内部网上设置了一个非常非常简单的ASP.NET
网站,为内部用户生成一些信息。我使用的是Windows身份验证,而不是匿名访问,因为根据用户访问网站,我将生成不同的信息。
长话短说,这完全可以在我开发应用程序的本地Windows 7
机器上进行测试。但是,从我希望它驻留的Windows 2008 R2 server
开始,当我点击该网站时,我会弹出一个要求我的凭据的弹出窗口,即使我输入它们,它也会一次又一次地向我询问。无论我是远程还是本地访问该站点,都会发生这种情况。如果我尝试使用匿名访问,我可以通过两种方式访问该网站,但由于我无法识别用户,因此无法生成我想提供的信息。
注意:
在IIS中,我有Windows身份验证和ASP.NET模拟 已启用该网站。其他一切都被禁用了。
为了弄清楚,我目前将web.config设置为允许所有用户,并且我不否认任何用户。
在AppHost文件中,我目前启用了WindowsAuthentication。
<windowsAuthentication enabled="true">
<providers>
<add value="Negotiate" />
<add value="NTLM" />
</providers>
</windowsAuthentication>
不可否认,我通常在此服务器上为所有其他内部站点使用表单身份验证,因此我对Windows身份验证和此问题有点新鲜。在这一点上,我只是不确定下一步要做什么或检查,所以任何建议都会有所帮助。感谢。
答案 0 :(得分:10)
我知道这是一个稍微陈旧的话题,但我有同样的问题。事实证明我使用Identity:ApplicationPoolIdentity而不是NetworkService来使用AppPool。一旦我切换它(在IIS7.5中的高级设置下),我不再让服务器提示输入额外的凭据,并且传递工作完美无缺。
希望有所帮助!
答案 1 :(得分:3)
首先,您应该意识到Windows直通身份验证仅适用于Internet Explorer,并且只有当该站点位于受信任站点或Intranet站点安全组中时才能使用。 Firefox,Chrome等将始终提示输入凭据。
话虽如此,你有几个问题。
您的web.config
中应该有一个<authentication mode="Windows" />
元素
您应该决定是否希望应用在用户的上下文中运行,在这种情况下,您还需要<identity impersonate="true"/>
标记。如果不是,它应该是假的(虽然这是默认值)。
如果站点本身完全受到Windows身份验证的保护,则无需在web.config中拥有任何授权规则。
答案 2 :(得分:0)
为了防止它有用,我遇到的问题是我将应用程序池保留在经典模式下,以便尝试使用NTFS权限。我从来没有这样做,但一旦我将其切换回集成模式,我可以使用<allow>
和<deny>
标签配置特定用户&#39;访问。