我尝试了很多很多不同的方法来获取这些数据。但我无法让它工作。我有一个 MVC4 应用程序,连接到 Active Directory。但我需要用户 AD GUID。
我试过了:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
但它们都不起作用。
我尝试了很多很多不同的方法来获取这些数据。但我无法让它工作。我有一个 MVC4 应用程序,连接到 Active Directory。但我需要用户 AD GUID。
我试过了:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
但它们都不起作用。
如果您使用的是 .NET 3.5 及更高版本,则应查看System.DirectoryServices.AccountManagement
(S.DS.AM) 命名空间。在这里阅读所有相关信息:
基本上,您可以定义域上下文并在 AD 中轻松找到用户和/或组:
// set up domain context
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain))
{
// find a user
UserPrincipal user = UserPrincipal.FindByIdentity(ctx, User.Identity.Name);
if(user != null)
{
Guid userGuid = user.Guid ?? Guid.Empty;
}
}
新的 S.DS.AM 使得在 AD 中与用户和组一起玩变得非常容易!
我设法解决了它(不漂亮......):
string login = HttpContext.Current.User.Identity.Name;
string domain = login.Substring(0, login.IndexOf('\\'));
string userName = login.Substring(login.IndexOf('\\') + 1);
DirectoryEntry domainEntry = new DirectoryEntry("LDAP://" + domain);
DirectorySearcher searcher = new DirectorySearcher(domainEntry);
searcher.Filter = string.Format("(&(objectCategory=person)(objectClass=user)(sAMAccountName={0}))",userName);
SearchResult searchResult = searcher.FindOne();
DirectoryEntry entry = searchResult.GetDirectoryEntry();
Guid objectGuid = entry.Guid;
使用的原始代码:entry.NativeGuid
,但由于小/大端“问题”而改变
entry.Guid
具有与 AD 中相同的“格式”。