ASP.NET Web サービスを Active Directory セットアップと統合し、それを使用してユーザーを認証し、メンバーである AD グループを確認し、カスタム アプリケーションを使用する権限があるかどうかを確認する際に問題が発生しています。
カスタム アプリケーションには独自のアクセス許可があり、管理者はカスタム アプリケーションの使用を許可する Active Directory グループを構成します。
私が抱えている問題は、別の信頼された AD フォレストのユーザーが完全な双方向信頼でログインしようとすると、ASP.NET Web サービスが通信する AD サーバーから彼のグループのリストを取得できないことです。ASP.NET Web サービスは、トラスト AD コントローラー (AD セカンダリ) ではなく、AD サーバー (AD メイン) にのみアクセスできます。
ユーザーは (AD セカンダリ) ドメインのメンバーであり、(AD メイン) ドメインに対してそのユーザーを認証できますが、ユーザーが (AD メイン) ドメインにいる場合、グループのリストを取得できません。 (AD セカンダリ) ドメイン。
このコードを試しました。
StringCollection groupids = new StringCollection();
try
{
DirectoryLibrary dirLib = new DirectoryLibrary();
DirectoryEntry directoryEntry = new DirectoryEntry("LDAP://" + domain,username, password);
if (directoryEntry != null)
{
//Enum the properties so we can see what is in them
foreach (string propname in directoryEntry.Properties.PropertyNames)
{
Debug.WriteLine(propname);
}
object obGroups = directoryEntry.Invoke("Groups");
foreach (object ob in (IEnumerable)obGroups)
{
// Create object for each group.
DirectoryEntry obGpEntry = new DirectoryEntry(ob);
groupids.Add(obGpEntry.NativeGuid);
}
}
}
catch (DirectoryServicesCOMException ex) { throw ex; }
私は DirectoryEntry オブジェクトから離れて、このようなものに移行しようとしました。
List<GroupPrincipal> result = new List<GroupPrincipal>();
StringCollection groupids = new StringCollection();
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain, domain, userName, password);
// find your user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if (user != null)
{
PrincipalSearchResult<Principal> groups = user.GetGroups();
// iterate over all groups
foreach (Principal p in groups)
{
// make sure to add only group principals
if (p is GroupPrincipal)
{
groupids.Add(p.DisplayName);
}
}
}
しかし、ユーザーを取得できず、他のドメインでそのユーザーのグループのリストを取得できません。どんな助けでも大歓迎です。