У меня проблемы с получением групп из Active Directory через System.DirectoryServices
Первоначально я запустил свое приложение на компьютере, который был зарегистрирован в домене, но, поскольку это был действующий домен, я не хотел делать какие-либо записи в AD, поэтому я настроил компьютер с Windows XP в качестве хост-операционная система и установленный Windows Server 2003 на виртуальной машине.
Я добавил еще один порт Ethernet в машину и настроил коммутатор, 1 порт Ethernet выделен для виртуальной машины, а другой порт используется для хоста.
После настройки IP-адресов для их связи я перенес свое приложение на хост-компьютер и запустил его, но я получил DirectoryServicesCOMException
.
С сообщением о том, что имя пользователя и пароль были недействительными :( просто чтобы проверить, что это не активный каталог, я создал третью виртуальную машину и установил Windows XP, которую я добавил в домен с учетными данными, проверенными в приложении, работает удовольствие.
Так что я подумал, что это должно быть потому, что машина, на которой запущено приложение, не является частью домена.
Вот блок кода, который вызывал проблему:
public CredentialValidation(String Domain, String Username, String Password, Boolean Secure)
{
//Validate the Domain!
try
{
PrincipalContext Context = new PrincipalContext(ContextType.Domain, Domain); //Throws Exception
_IsValidDomain = true;
//Test the user login
_IsValidLogin = Context.ValidateCredentials(Username, Password);
//Check the Group Admin is within this user
//******HERE
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);
foreach(Principal Result in Results)
{
if (Result.SamAccountName == "Domain Admins")
{
_IsAdminGroup = true;
break;
}
}
Results.Dispose();
Context.Dispose();
}
catch (PrincipalServerDownException)
{
_IsValidDomain = false;
}
}
Информация в диалоге входа вводится так:
Domain: test.internal
Username: testaccount
Password: Password01
Надеюсь, что кто-то может пролить свет на эту ошибку.
Обновление:
После проверки журналов безопасности на сервере я вижу, что мои попытки входа в систему были успешными, но до:
_IsValidLogin = Context.ValidateCredentials(Username, Password);
Строка, после которой я проверяю группы, вызывает ошибку, поэтому основная проблема заключается в том, что строки кода ниже не работают правильно с компьютера, который не подключен к сети :
var Results = UserPrincipal.FindByIdentity(Context, Username).GetGroups(Context);