Sharepoint - 模拟应用程序池身份

Posted

技术标签:

【中文标题】Sharepoint - 模拟应用程序池身份【英文标题】:Sharepoint - Impersonating App Pool Identity 【发布时间】:2014-10-16 18:20:22 【问题描述】:

我正在使用 SPSecurity.RunWithElevatedPrivileges.... 允许“模拟”超级用户“sharepoint\system”帐户。

“sharepoint\system”账号是不是当前web应用的app pool标识的别名?

如果我的应用程序池身份是自定义用户(包含电子邮件和其他信息),我如何检索其信息? (我试图获取的信息是电子邮件地址...自定义应用程序池用户电子邮件有值,“sharepoint\system”帐户电子邮件没有价值!!!)

我还尝试使用 WindowsIdentity.Impersonate(IntPtr.Zero) 方法检索 appPool 身份,但是……没有!

所以有什么想法吗???

【问题讨论】:

【参考方案1】:

注意事项:

SPSecurity.RunWithElevatedPrivileges委托方法中运行的代码在SharePoint\System账户下运行 SharePoint\System 帐户拥有超级用户权限。但是它在 SharePoint 运行时环境中被识别,但不被 Windows 安全系统识别,即它不代表 AppPool 正在运行的帐户 当尝试访问服务器文件系统/数据库等 SP 环境之外的资源时,只有 AppPool 身份出现

如果您想访问运行 AppPool 的用户帐户的电子邮件地址,您可以尝试...

SPSecurity.RunWithElevatedPrivileges(delegate 
        using (SPSite siteCollection = new SPSite("Url"))
        
            using (SPWeb site = siteCollection.OpenWeb())
            
                Console.WriteLine(string.Format("Current Logged in User is 0. And Email Id: 1 ", site.CurrentUser.LoginName ,site.CurrentUser.Email));
                appPoolAccount = siteCollection.WebApplication.ApplicationPool.Username;
                SPUser appPoolUser = site.Users[appPoolAccount] as SPUser;
                Console.WriteLine(string.Format("AppPool User is 0. And Email Id: 1 ", appPoolUser.LoginName, appPoolUser.Email));
                Console.ReadKey();
            
        
    );
输出看起来像... 因此,如果您真的想获取 AppPool 帐户的 EmailId,请明确选择用户并访问 SPUser 对象的 Email 属性,就像我在上面所做的那样。

【讨论】:

以上是关于Sharepoint - 模拟应用程序池身份的主要内容,如果未能解决你的问题,请参考以下文章

SharePoint 高信任提供程序托管应用程序 - 用户模拟 - 站点管理员

共享点身份验证。如何从 ADFS 获取 SharePoint cookie

在声明身份验证的 SharePoint 2010 中托管的 WCF 服务中的模拟

如何从 sharepoint 2013 Web 服务和 Active Directory 对用户进行身份验证

asp.net web.config 模拟与应用程序池标识

.Net Crystal Reports 13 可以使用应用程序池身份登录 SQL Server 吗?