我创建了一个虚拟目录 (IIS 7.0),它指向网络共享。此虚拟目录位于我的 Web 应用程序根目录下。
我尝试使用域凭据进行匿名访问。此外,我还尝试使用以下模拟...
<identity impersonate="true" userName="<supplied username>"
password="<supplied password>" />
问题:应用程序总是使用 IUSR 连接到该共享并收到“拒绝访问”提示。我需要强制我的应用程序使用上面的域名。
更新
1. 运行 procmon 时,每次在拒绝访问之前我都能看到“FAST IO DISALLOWED”消息。不太确定这是否相关。
2. 我怀疑这里存在双跳问题的症状。但不知道如何真正验证它或如何在不真正将身份验证更改为 Kerbros 的情况下绕过它。
谢谢!
答案1
首先,“模拟”这个术语仅适用于同一台机器内部,如果您的网络共享(或 IIS、虚拟目录或 MS SQL Server 等)位于另一台计算机上,那么它就是委派,您应该在计算机之间对其进行配置(读取 SPN,即服务主体名称)。
您的网络共享在同一台计算机上还是在不同的计算机上?
那么,它就不是“双跳”,因为您没有传递 web 应用程序用户的原始身份,而是在 web.config 中使用固定的模拟。
我希望它不在生产环境中?将凭据放入 web.config 中是邪恶的,邪恶的,邪恶的,千万不要这样做,千万不要!
顺便说一句,通过在域用户下在自定义应用程序池中运行 webapp,您可以达到相同的结果,而无需在 web.config 中固定模拟,参见 [1]。这更简单、更可配置且更可靠。
由于您的帖子中确切的内容很模糊,我本可以尝试为所有可能的情况写下说明,但最终会写成一篇难以阅读的数十页的文章。
好的,我开始写:
在 IIS(网站属性)中禁用“匿名访问”并启用“基本身份验证”
更改<authentication mode="None" />
到
<authentication mode="Windows" />
在 web.config 中
在 Windows 资源管理器 --> 菜单工具---> 文件夹选项...---> 选项卡查看中禁用“使用简单文件共享”
授予网络共享上的用户名权限
确保所有参与交互的计算机上都启用了 NTLM
请阅读并遵循 [2] 中的说明。
我找不到针对 IIS7/W2006 的同等质量描述,但我坚信您的需求没有改变。
如果您有任何其他问题或疑问,请发布更具体的问题。
-----引用:
[1]
如何:为 ASP.NET 2.0 应用程序创建服务帐户
http://msdn.microsoft.com/en-us/library/ms998297.aspx
[2]
如何在 ASP.NET 2.0 中使用模拟和委托
http://msdn.microsoft.com/en-us/library/ff647404.aspx