【问题标题】:Impersonation and Delegation模仿和委托
【发布时间】:2010-09-30 04:29:44
【问题描述】:

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

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

在使用 IIS6 的两台 Windows 2003 服务器上,我得到了不同的模拟级别:Delegation 在一台服务器上,Impersonation 在另一台服务器上。

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

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

【问题讨论】:

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


    【解决方案1】:

    如果您使用 localhost 作为网络服务器进行测试并且它可以正常工作,但在部署时您收到错误,您可能会遇到双跳问题...。在此 blog post 中进行了概述

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2010-09-23
        • 2020-12-04
        • 1970-01-01
        • 2010-10-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多