このデータを取得するために、さまざまな方法を試しました。しかし、私はそれを機能させることができません。Active Directory に接続された MVC4 アプリケーションがあります。しかし、ユーザーの AD GUID が必要です。
私は試した:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
しかし、どれも機能しません。
このデータを取得するために、さまざまな方法を試しました。しかし、私はそれを機能させることができません。Active Directory に接続された MVC4 アプリケーションがあります。しかし、ユーザーの AD GUID が必要です。
私は試した:
(Guid)Membership.GetUser(User.Identity.Name).ProviderUserKey;
WebSecurity.CurrentUserId;
しかし、どれも機能しません。
.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 でユーザーやグループを簡単に操作できます。
私はそれを解決することができました(きれいではありません...):
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と同じ「フォーマット」を持っています。