Sharepoint - 模拟应用程序池标识

时间:2014-10-16 18:20:22

标签: sharepoint impersonation applicationpoolidentity

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

“sharepoint \ system”帐户是否是当前Web应用程序的应用程序池标识的别名?

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

我还尝试使用WindowsIdentity.Impersonate(IntPtr.Zero)方法检索appPool标识但是......没有!

所以任何想法????

1 个答案:

答案 0 :(得分:1)

注意事项:

  • SPSecurity.RunWithElevatedPrivileges委托方法中运行的代码在SharePoint\System帐户下运行
  • SharePoint\System帐户拥有超级用户权限。但是,它在SharePoint运行时环境中被识别,但不是由Windows安全系统识别,即它不代表运行AppPool的帐户
  • 当尝试访问SP环境之外的资源(例如服务器文件系统/ DB)时,只有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();
                }
            }
        });
    
  • 输出看起来像...... enter image description here
  • 因此,如果您真的想要获取AppPool帐户的EmailId,请明确选择用户并访问Email对象的SPUser属性,如上所述..