声明环境中用户主体名称的 SharePoint UserProfile

Posted

技术标签:

【中文标题】声明环境中用户主体名称的 SharePoint UserProfile【英文标题】:SharePoint UserProfile from User Principal Name in Claims environment 【发布时间】:2012-02-15 19:32:48 【问题描述】:

我有一个使用用户主体名称 (UPN) 格式保存在数据库中的帐户:jdoe@domain.gobalx.com

我正在使用 UPN 格式对声明进行身份验证的 SharePoint 环境中工作。

我的问题是我需要为持久化的 UPN 帐户获取一个 UserProfile 对象。我尝试了以下方法,但它不起作用:

string upnAccount = "jdoe@domain.globalx.com";
SPServiceContext ctx = SPServiceContext.GetContext(SPContext.Current.Site);
UserProfileManager upm = new UserProfileManager(ctx);
UserProfile user = upm.GetUserProfile(upnAccount);

我不断收到:Microsoft.Office.Server.UserProfiles.UserNotFoundException:检索用户配置文件时遇到错误

这是否意味着我必须将 UPN 帐户转换为索赔,如果是这样,有人有如何做到这一点的示例吗?

【问题讨论】:

【参考方案1】:
            UserProfileManager UPM = null;

            using (SPSite site = new SPSite(SPContext.Current.Web.Url))
            
                using (SPWeb web = site.OpenWeb())
                
                    ServerContext serverContext = ServerContext.GetContext(site);
                    UPM = new UserProfileManager(serverContext);
                     foreach (UserProfile profile in UPM)
                    

                        an = profile["AccountName"].Value;
                        title = profile["Title"].Value;
                    
                
            

你可以试试这个来获取所有用户配置文件。在 foreach 循环中,您可以检查您的字段并获取特定的用户详细信息

【讨论】:

【参考方案2】:

在某些情况下,在具有联合身份验证的 SharePoint 网站下,在您未设置同步之前不会自动创建用户配置文件。对于这个问题,您可以通过 Central Admin 检查是否已经存在 jdoe@domain.globalx.com 的用户配置文件。

此外,您的代码必须在模拟下运行,检查日志是否有异常并尝试使用 SPSecurity.RunWithElevatedPrivileges。

【讨论】:

以上是关于声明环境中用户主体名称的 SharePoint UserProfile的主要内容,如果未能解决你的问题,请参考以下文章

sharepoint中当前登录用户的名称

SharePoint 使用客户端证书为没有 Active Directory 帐户的用户声明身份验证

csharp 此代码段提升了用户的权限,以便从SharePoint对象模型执行某些操作。只有在Elev中声明的项目

如何从对象的规范名称中获取用户主体名称

从基于 Sharepoint 声明的身份验证 Web 应用程序中的代码访问 Windows 共享

Janusgraph 库无法在 kerberos 环境中与 hbase 通信(无法指定服务器的 Kerberos 主体名称)