在SharePoint中检索友好名称作为声明用户

时间:2013-05-13 18:25:49

标签: c# sharepoint claims

我会先解释一下我要做的事情。我传入了声明标识符,例如0e.t|saml provider|first.last@domain.local。我想将其修剪为first.last@domain.local

我很清楚这可以通过简单的字符串格式化完成,但是,这不是很灵活,所以如果传递的东西我没想到,字符串格式化可能会失败。它更容易出问题。

我想动态地这样做。这是我尝试过的。

尝试使用上面的声明标识符EnsureUser,然后调用SPUser.Name:

SPUser spUser = SPContext.Current.Web.EnsureUser(spUserName);
userName = spUser.Name;

我已尝试将以下字符串作为EnsureUser中的参数,所有这些都会导致异常:The user with the specified logonName cannot be found in Active Directory.

0e.t|saml provider|first.last@domain.local

saml provider|first.last@domain.local

first.last@domain.local

同样,所有这些都失败了。

我尝试了另一种方法,使用SPClaimProviderManager(从this blog拉出来):

SPClaimProviderManager mgr = SPClaimProviderManager.Local;
if (mgr != null && SPClaimProviderManager.IsEncodedClaim(userName))
{
    spUserName = mgr.DecodeClaim(SPContext.Current.Web.CurrentUser.LoginName).Value;
}

我想确保我尝试解码实际声明,而不是其他内容,因此我致电IsEncodedClaim。但是,这始终返回false

我的问题:

1)我在这里做错了什么导致这两种尝试都失败了?我需要做些什么才能让他们正常运作?

2)有没有更好的方法来获得没有字符串解析的友好声明用户名?

1 个答案:

答案 0 :(得分:2)

叹息不知何故声明字符串开头的i:被删掉了。

应该阅读i:0e.t|saml provider|first.last@domain.local。一旦添加回来,一切都开始正常运作。