从HttpContext.Current.User获取AD Guid

时间:2013-06-20 11:57:54

标签: asp.net-mvc-4 active-directory

我尝试了很多不同的方法来获取这些数据。但我无法让它发挥作用。 我有一个MVC4应用程序,与Active Directory连接。但我需要用户AD GUID。

我试过了:

(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;

但它们都不起作用。

2 个答案:

答案 0 :(得分:2)

如果您使用的是.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中的用户和群组一起玩!

答案 1 :(得分:0)

我设法解决了它(不太漂亮......):

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,但由于Little / Big endian“问题”我改变了

entry.Guid具有与AD中相同的“格式”。