【问题标题】:Can I turn off impersonation just in a couple instances我可以在几个情况下关闭模拟吗
【发布时间】:2010-09-12 14:39:57
【问题描述】:

我有一个在整个过程中都使用模拟的应用。但是当用户以管理员身份登录时,一些操作需要他们写入服务器本身。现在,如果这些用户在实际服务器上没有权限(有些没有),它不会让他们写。

我想要做的只是关闭几个命令的模拟。

有没有办法做这样的事情?

using(HostingEnvironment.Impersonate.Off())
  //I know this isn't a command, but you get the idea?

谢谢。

【问题讨论】:

    标签: c# asp.net impersonation


    【解决方案1】:

    确保应用程序池确实具有您需要的适当权限。

    然后,当您想恢复到应用程序池身份时...运行以下命令:

    private WindowsImpersonationContext context = null;
    public void RevertToAppPool()
    {
        try
        {
            if (!WindowsIdentity.GetCurrent().IsSystem)
            {
                context = WindowsIdentity.Impersonate(System.IntPtr.Zero);
            }
        }
        catch { }
    }
    public void UndoImpersonation()
    {
        try
        {
            if (context != null)
            {
                context.Undo();
            }
        }
        catch { }
    }
    

    【讨论】:

      【解决方案2】:

      我不确定这是否是首选方法,但当我想这样做时,我新建了一个 WindowsIdentity 的实例并调用了 Impersonate 方法。这允许后续代码模拟不同的 Windows 用户。它返回一个WindowsImpersonationContext,它有一个Undo 方法,可以再次恢复模拟上下文。

      【讨论】:

      • 您知道我可以调用默认的 web_app 帐户而不在任何地方指定它吗?
      【解决方案3】:

      您可以关闭页面的身份验证,然后在代码的其余部分手动模拟经过身份验证的用户。

      http://support.microsoft.com/kb/306158

      这有对最后一部分的引用,但基本上你冒充 User.Identity

      这意味着您必须在对页面的任何调用开始时进行模拟,在需要时将其关闭,然后在完成后重新打开,但这应该是一个可行的解决方案。

      【讨论】:

        【解决方案4】:

        我刚刚将文件夹写入权限授予“Authenticated Users”

        【讨论】:

        • 这也有效。但它留下了一些巨大的安全风险。因为即使是匿名用户也可以写入该文件夹。我强烈建议你让自己成为一个恢复到应用程序池标识的类。然后使用该实例进行还原。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-04
        • 1970-01-01
        • 1970-01-01
        • 2011-04-20
        相关资源
        最近更新 更多