登录到其他域Windows身份验证C#时,获取登录用户的全名

时间:2018-11-27 11:41:53

标签: active-directory windows-authentication

我们遇到的问题是,从其他域读取时无法获得用户全名。

例如:我的用户名是dom1 \ jsmith,全名是John Smith。在dom1域中部署项目时,我们可以登录并获取用户的全名。当我们在用户(dom1 \ jsmith)具有登录权限的另一个域(dom2)中部署该项目时,它可以访问该站点,但无法获得全名。

我们尝试了不同的解决方案,但是没有用。

//output: dom1\jsmith
User.Identity.Name;
//output: dom1\jsmith
string s = System.Security.Principal.WindowsIdentity.GetCurrent().Name; 

//output: dom1\jsmith
string sUserName = System.Environment.UserName;  


//output: John Smith in same domain but not able to find identity
 using (var context = new PrincipalContext(ContextType.Domain))
    {
        var principal = UserPrincipal.FindByIdentity(context, User.Identity.Name);
        if (principal != null)
            var fullName = string.Format("{0} {1}", principal.GivenName, principal.Surname);

1 个答案:

答案 0 :(得分:1)

将登录域的名称传递到PrincipalContext的构造函数中。因此,请拆分您拥有的DOMAIN\username,并仅使用域部分:

var split = User.Identity.Name.Split('\\');

using (var context = new PrincipalContext(ContextType.Domain, split[0])) {
     ...
}

尽管令我惊讶的是,它无法像您所拥有的那样起作用,因为它适用于我,并且我登录的域与我的计算机所连接的域不同。尽管就我而言,这两个域位于同一个AD林中。也许情况并非如此。

相关问题