1

このデータを取得するために、さまざまな方法を試しました。しかし、私はそれを機能させることができません。Active Directory に接続された MVC4 アプリケーションがあります。しかし、ユーザーの AD GUID が必要です。

私は試した:

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

しかし、どれも機能しません。

4

2 に答える 2

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 でユーザーやグループを簡単に操作できます。

于 2013-06-20T12:05:05.087 に答える
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.GuidADと同じ「フォーマット」を持っています。

于 2013-06-20T13:34:39.753 に答える