我嘗試了很多很多不同的方式來獲取此數據。但我無法讓它工作。 我有一個MVC4應用程序,連接Active Directory。但我需要用戶AD GUID。從HttpContext.Current.User獲取AD Guid
我想:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
但他們沒有工作。
我嘗試了很多很多不同的方式來獲取此數據。但我無法讓它工作。 我有一個MVC4應用程序,連接Active Directory。但我需要用戶AD GUID。從HttpContext.Current.User獲取AD Guid
我想:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
但他們沒有工作。
我設法解決它(不漂亮...):使用
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相同的「格式」。
如果您使用的是.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中的用戶和羣組玩耍!
很抱歉忘了提。我在.NET 4上 –