繁体   English   中英

ASP.NET-在默认情况下可以临时模拟应用程序池服务ID以模拟用户吗?

[英]ASP.NET - temporarily impersonate the app pool service ID when default it to impersonate the user?

我必须在运行Web应用程序的同一服务ID下运行的SharePoint网站中调用一些代码。 默认情况下,SharePoint冒充用户查看网页,并且用户没有必要的权限。

使用Web应用程序的服务ID来运行某些代码,然后又恢复为使用默认模拟的最佳方法是什么?

纳特是对的。 您应该使用SPSecurity.RunWithElevatedPrivileges。 在幕后,它执行了Anthony提到的ReverToSelf,但是使用助手方法要容易得多。 您可以使用内联委托,如以下示例所示。

要实现的主要目的是,该委托在单独的应用程序域下运行,这基本上意味着您要使用SPSite或SPWeb,必须在委托中重新实例化它们,如下所示。

SPSecurity.RunWithElevatedPrivileges(delegate()
{
    // Your are now inside the delegate
    // Anything provided within this block is marshaled across the app domain
    using (SPSite site = new SPSite("http://myserver/sites/mysite"))
    {
        using (SPWeb web= site.OpenWeb())
        {
            // Do stuff here
        }
    }
});

在ASP下,我有一个实用程序DLL,可以用来调用Win32的RevertToSelf()函数(位于advapi32.dll中)来使ASP在应用程序池的身份下运行。

当然,一旦到达那里,就不会回到线程使用的原始身份了,但这并不是真正的问题。 当前请求结束后,下一个请求将以用户(或匿名用户)的身份再次运行。

您可能可以在ASP.NET中使用PInvoke进行相同的操作,但是我不知道这可能会对框架产生什么影响。 我敢肯定,它只会持续到当前请求。 我认为没有任何标准的.NET API可以做到这一点。

简单! 将您正在进行的呼叫包装在HostingEnvironment.Impersonate()块中。

http://msdn.microsoft.com/en-us/library/system.web.hosting.hostingenvironment.impersonate.aspx

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM