У нас есть приложение, которое основано на Active Directory для его аутентификации, и мы пытаемся реализовать его на клиенте, который использует Novell eDirectory (или, я полагаю, сейчас NetIQ). Они установили функцию Доменные службы для Windows, который, согласно техническому документу, должен имитировать аутентификацию Active Directory и запросы LDAP, которые фактически поддерживаются их eDirectory. Однако я не могу заставить это работать.
Вот фрагмент кода PowerShell, который я извлек из нашей C# базы кода, который копирует то, что мы пытаемся сделать:
$domain = New-Object System.DirectoryServices.AccountManagement.PrincipalContext([System.DirectoryServices.AccountManagement.ContextType]::Domain, "dsfw.domain.local", "DC=domain,DC=local")
$user = [System.DirectoryServices.AccountManagement.UserPrincipal]::FindByIdentity($domain, "Administrator")
$user.GetAuthorizationGroups()
В настоящей системе Active Directory мне не нужно указывать имя сервера или путь к контейнеру LDAP, но попытка сделать это на этом сервере, который «присоединен» к домену DSfW, не работает. Если я укажу эти параметры, как показано, я, по крайней мере, смогу найти подходящего пользователя, но любая попытка получить группы пользователей вернет пару групп, а затем рано завершится с ошибкой 0x8000005c
. Я пытался GetAuthorizationGroups
, GetGroups
, и даже используя DirectorySearcher
, все делают одно и то же:
$user.GetAuthorizationGroups() | Format-Table IsSecurityGroup,DisplayName,SamAccountName
IsSecurityGroup DisplayName SamAccountName
--------------- ----------- --------------
True GLOBAL\Everyone Everyone
True NT AUTHORITY\Authenticated Users Authenticated Users
An error occurred while enumerating through a collection: Unknown error (0x8000500c).
Я достаточно далеко, чтобы понять, что ошибка возникает из-за какого-то не удалось преобразовать нативные типы в типы DS, но я не могу понять, какой тип (типы) является проблемой или откуда он загружается. Что еще более важно, я не могу понять, как обойти проблему. Все, что меня действительно волнует, это SamAccountName
группы, поэтому, если бы я мог как-то сказать LDAP игнорировать все остальное, я чувствую, что это сработает, но я не могу понять, как.
У кого-нибудь есть опыт работы с DSfW, который может указать мне правильное направление?