Get AD Guid from HttpContext.Current.User



我尝试了很多很多不同的方法来获得这些数据。但我不能让它工作。我有一个MVC4应用程序,和活动目录连在一起。但是我需要用户的AD GUID。

I tried:

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

如果你使用的是。net 3.5及以上版本,你应该检查一下System.DirectoryServices.AccountManagement (S.DS.AM)命名空间。阅读这里的所有内容:

    管理。net Framework 3.5中的目录安全主体
  • System.DirectoryServices.AccountManagement上的MSDN文档

基本上,您可以定义域上下文并轻松地在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相同。

相关内容

最新更新