我正在使用模拟用于访问UNC共享上的文件,如下所示。
var ctx = ((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate();
string level = WindowsIdentity.GetCurrent().ImpersonationLevel);
在使用IIS6的两台Windows 2003服务器上,我获得了不同的模拟级别:一台服务器上的委派和另一台服务器上的模拟。
这会导致我无法以“模拟”级别访问服务器上的UNC共享的问题。
可能导致这种差异的原因是什么?我搜索了应用程序池,站点和虚拟目录的machine.config和IIS设置 - 但是无法找到导致此问题的原因。
答案 0 :(得分:7)
听起来有一台计算机受到Active Directory委托的信任,但另一台则不然。如果应用程序池标识是网络服务,请确保计算机帐户在AD中标记为“信任委派”。
您可能需要请求您的AD管理员强制执行复制,然后注销/进入您的工作站以刷新Kerberos票证缓存。
答案 1 :(得分:2)
如果您使用localhost作为网络服务器进行测试并且其工作正在部署时您收到错误,则可能会遇到双跳问题....此blog post
中概述答案 2 :(得分:1)
对于我们执行Impersonate()的某个应用程序,我们发现必须修改应用程序池所有者的本地安全策略,并将该帐户添加到以下策略/组中:
在服务器上,运行开始>所有程序>管理工具>然后,本地安全策略导航到本地安全策略>用户权利分配并查找上述两个政策。