使用User.Identity.Name连接到正确的广告域?

时间:2014-07-01 10:46:03

标签: c# authentication active-directory

我正在使用User.Identity.Name让用户使用我的网络应用登录。

然后我查询AD以获取该用户的属性:

string[] sx = User.Identity.Name.Split('\\');
var username = sx[sx.Count() - 1];

DirectorySearcher searcher = new DirectorySearcher();
searcher.Filter = string.Format(Filter, username);
SearchResult user = searcher.FindOne();

现在我想添加域名支持:

string[] sx = UserIdentityName.Split('\\');
var username = sx[sx.Count() - 1];
var domain = sx[0];

DirectoryEntry entry = new DirectoryEntry("LDAP://DC=" + domain));
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = string.Format(Filter, username);
SearchResult user = searcher.FindOne();

这不起作用,可能是因为域名不完全合格。所以我需要DC=intra我需要DC=intra,DC=contoso,DC=comDC=sub我需要DC=sub,DC=intra,DC=contoso,DC=com

如何仍然连接到正确的AD域?我可以为登录的用户获取完全限定的用户名(UPN名称),还是可以获得用户登录的正确AD域,或者我如何实现此目的?

1 个答案:

答案 0 :(得分:0)

你发现这不会起作用。相反,使用以下内容基于SID进行绑定:

WindowsIdentity current = (WindowsIdentity)User.Identity;
DirectoryEntry userObject = new DirectoryEntry("LDAP://<SID=" + current.User.ToString() + ">");