假冒和授权

我正在使用模拟用于访问UNC共享上的文件,如下所示。

var ctx = ((WindowsIdentity)HttpContext.Current.User.Identity).Impersonate(); string level = WindowsIdentity.GetCurrent().ImpersonationLevel); 

在使用IIS6的两台Windows 2003服务器上,我获得了不同的模拟级别:一台服务器上的委派和另一台服务器上的模拟

这会导致我无法以“模拟”级别访问服务器上的UNC共享的问题。

什么可能导致这种差异? 我搜索了应用程序池,站点和虚拟目录的machine.config和IIS设置 – 但无法找到此问题的原因。

听起来好像其中一台计算机受到Active Directory的委托信任,但另一台则不然。 如果应用程序池标识是网络服务,请确保计算机帐户在AD中标记为“受信任以进行委派”。

您可能需要请求AD管理员强制进行复制,然后注销/进入工作站以刷新Kerberos票证缓存。

如果您使用localhost作为webserver进行测试并且其工作正在部署时您收到错误,则可能会遇到双跳问题….本博客文章中概述了

对于我们执行Impersonate()的应用程序之一,我们发现必须修改应用程序池所有者的本地安全策略,并将该帐户添加到以下策略/组:

  1. 作为操作系统特权的一部分。
  2. 身份validation后模拟客户端。

在服务器上,运行开始>所有程序>管理工具>本地安全策略,然后导航到本地安全策略>用户权限分配,并查找上面的两个策略。