2008-09-24 70 views
17

我有一个应用程序在整个过程中都使用了模拟。但是当用户以管理员身份登录时,一些操作需要他们自己写入服务器。现在,如果这些用户在实际的服务器上没有权限(有些不这样做),它不会让他们写入。我是否可以在几次关闭的情况下关闭模拟

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

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

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

谢谢。

回答

20

确保应用程序池确实有你需要的正当权益。

然后,当你想要恢复到应用程序池标识...运行以下命令:

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方法,可以将模拟上下文重新恢复回去。

+0

有没有你知道的,我可以调用默认web_app账户,而不会有任何指定它什么办法? – naspinski 2008-09-24 03:24:25

0

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

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

这有可能是最后一个参考,但基本上你冒充User.Identity

这将意味着你将不得不在页面的任何呼叫开始模仿,把它关掉当你需要它的时候,当你完成后再打开它,但它应该是一个可行的解决方案。

0

我刚刚结束了给文件夹的写权限“验证用户”

+0

也可以。但是它留下了一些巨大的安全风险。因为即使匿名用户也可以写入该文件夹。我强烈建议您让自己成为一个恢复到应用程序池标识的类。然后使用该实例在还原下。 – 2008-10-20 03:19:17

相关问题