2013-06-20 56 views
1

我嘗試了很多很多不同的方式來獲取此數據。但我無法讓它工作。 我有一個MVC4應用程序,連接Active Directory。但我需要用戶AD GUID。從HttpContext.Current.User獲取AD Guid

我想:

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

但他們沒有工作。

回答

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,但我改變了,因爲小/大端 「問題」

entry.Guid有與AD相同的「格式」。

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中的用戶和羣組玩耍!

+0

很抱歉忘了提。我在.NET 4上 –