我有一个 asp.net 应用程序,它依赖于Request.LogonUserIdentity.Name
使用登录到客户端计算机的人员的用户名进行填充。在 Web 服务器上的 IIS7 中,我已禁用Anonymous Authentication
并启用ASP.NET Impersonation
& Windows Authentication
。(我使用服务帐户登录 Web 服务器,而不是我自己的帐户。)当我尝试从我的桌面浏览该站点时,系统提示我输入网络凭据,但失败了 - 401 Unauthorized...
。我正在使用 .Net 3.5 sp 无论如何。服务器正在运行 IIS 7.5。
应用程序池:
- 托管管道模式:经典的
- 载入用户资料:错误的
- 身份:应用程序池标识
Web应用程序:
- .NET 身份验证规则:允许所有用户
- 启用的身份验证类型:ASP.NET 模拟,Windows
文件系统文件夹权限:
- 創作者所有者:特殊权限
- 机器\IUsr:读取并执行、列出文件夹内容、读取
- 机器\系统:完全控制
- 我的域名账户:完全控制
- 机器\管理员:完全控制
- 机器\用户:读取并执行、列出文件夹内容、读取
- 计算机\IIS_IUSRS:读取并执行、列出文件夹内容、读取
- 受信任的安装程序:完全控制
我尝试添加Machine\Everyon
e 并Domain\Domain Users
赋予其读取权限以及完全控制权限,但仍然被阻止。
答案1
这很可能是由于在服务器上本地测试时 loopbackcheck 造成的。我敢肯定,如果您从另一台服务器测试它,它会起作用。
使用此页面中的方法 2 关闭环回检查:http://support.microsoft.com/kb/896861. 重启不是您需要进行更改。
至于权限,启用模拟后,将需要经过身份验证的用户,此外还需要应用程序池用户的一些权限。因此,要使用的关键权限是 SYSTEM、管理员、“IIS APPPOOL\{apppoolname}”以及可能进行身份验证的用户组。
答案2
在 IIS 7.5 中,当您打开 Windows 身份验证时,还有一个提供程序选项。默认情况下,协商是第一首选项,然后是 NTLM。我见过协商由于其他设置相关问题而失败的问题,然后向用户提供凭据质询。我已经能够通过将 NTLM 设为第一个提供程序来解决这个问题。
您还可以使用 fiddler 查看站点流量,以了解当您的凭证被质疑时发生的情况。