У меня возникла проблема с интеграцией моей веб-службы ASP.NET с настройкой Active Directory и ее использованием для аутентификации пользователей и проверки групп AD, в которых они являются членами и если у них есть разрешения на использование моего пользовательского приложения.
У моего пользовательского приложения есть собственные разрешения, и администраторы настраивают группы Active Directory, которым разрешено использовать это пользовательское приложение.
Проблема, с которой я сталкиваюсь, заключается в том, что когда пользователь из другого доверенного леса AD с полным двухсторонним доверием пытается войти в систему, я не могу получить список его групп с сервера AD, с которым общаются мои веб-службы ASP.NET. с участием. Веб-служба ASP.NET имеет доступ только к серверу AD (AD Main ), а не к доверенному контроллеру AD (AD Secondary ).
Пользователь является членом (вторичного )домена AD, и я могу аутентифицировать этого пользователя в домене (AD Main ), но не могу получить список групп из (Основной )домен 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);
}
}
}
Но я не получаю пользователя и не могу получить список групп для этого пользователя в другом домене. Любая помощь будет оценена по достоинству.