假冒和授权

时间:2009-01-08 01:12:16

标签: c# asp.net iis-6 impersonation delegation

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

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

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

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

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

3 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

如果您使用localhost作为网络服务器进行测试并且其工作正在部署时您收到错误,则可能会遇到双跳问题....此blog post

中概述

答案 2 :(得分:1)

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

  1. 作为操作系统权限的一部分。
  2. 验证后模拟客户端。
  3. 在服务器上,运行开始>所有程序>管理工具>然后,本地安全策略导航到本地安全策略>用户权利分配并查找上述两个政策。