[英]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.