EnsureUser的用法

文章详细阐述了在SharePoint2010和2013版本中,当使用基于声明的身份验证时,EnsureUser方法的正确使用方式。通过将用户登录名转换为claim认证形式,解决了无法正确添加用户的错误问题。

原文地址:点击打开链接

        上周看到了一些代码,在使用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的参数。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值