原文地址:点击打开链接
上周看到了一些代码,在使用EnsureUser这个方法的时候,有些问题。这个方法属于SPWeb对象,用来确保一个user已经添加到SharePoint中了。问题出在SharePoint 2010和2013版本的claim-based认证上面,如果一个SharePoint web application使用了claim-based认证方式,在使用EnsureUser方法的时候,是不能将用户的登录名(domain\username)作为参数传入的,因为这种使用方法只有在windows认证的情况下是正确的。在claim-based认证方式下,这样的用法会报一个“User not found”错误。
正确的做法是,将登录名(domain\username)转换为claim认证的形式(例如以i:0#.开头的值)。然后再将这个值作为参数传给EnsureUser方法。
请看一下示例:
SPClaimProviderManager cpm = SPClaimProviderManager.Local;
SPClaim userClaim = cpm.ConvertIdentifierToClaim("domain\\username", SPIdentifierTypes.WindowsSamAccountName);
using (SPSite theSite = newSPSite("https://www.contoso.com"))
{
SPWeb theWeb = theSite.OpenWeb();
SPUser theUser = theWeb.EnsureUser(userClaim.ToEncodedString());
}
使用PowerShell:
$claim = New-SPClaimsPrincipal -Identity corp\servero -IdentityType WindowsSamAccountName
$web.EnsureUser($claim.ToEncodedString());
无论使用哪种方法,得到的claim认证形式的值都像这样: i:0#.w|domain\\username,这才是正确的EnsureUser的参数。
文章详细阐述了在SharePoint2010和2013版本中,当使用基于声明的身份验证时,EnsureUser方法的正确使用方式。通过将用户登录名转换为claim认证形式,解决了无法正确添加用户的错误问题。
478

被折叠的 条评论
为什么被折叠?



