На самом деле я отлаживаю приложение C#, но, поскольку та же самая команда возможна в PowerShell, я пробую там.
Я пытаюсь проверить учетные записи пользователей, используя в PowerShell следующее:
> Add-Type -AssemblyName System.DirectoryServices.AccountManagement
> $ds = New-Object System.DirectoryServices.AccountManagement.PrincipalContext("домен", "<домен>", "<OuDN>", "переговоры", "<имя пользователя>", "<пароль>")
> $ds.ValidateCredentials("<имя пользователя>", "<пароль>", "переговоры")
Последняя команда всегда возвращает false, я проверил правильность учетных данных, войдя с ними. Мы отключили аутентификацию NTLM в среде, и я могу видеть каждый раз, когда я выполняю Подтвердить учетные данные ()
NTLM-соединение с помощью lsass.exe заблокировано (идентификатор события 4002 в средстве просмотра событий). Я включил ведение журнала Kerberos, но никакие события не генерируются в средстве просмотра событий при попытке проверки. Это, в свою очередь, заставляет меня поверить, что он даже не пытается выполнить аутентификацию Kerberos, но я могу ошибаться.
Я проверил, что имена участников-служб для компьютера существуют с помощью setspn -L
, и поскольку аутентификация Curb работает везде в системе, я не уверен, что это неправильная конфигурация.
Обновлять:
Я нашел решение, но еще не опубликовал его как ответ, так как у меня все еще странное поведение. я добавил @<домен>
к имени пользователя, и это работает в приложении C #, которое я отлаживаю, но выполнение той же самой команды в PowerShell по-прежнему возвращает false, хотя теперь я получаю KDC_ERR_PREAUTH_FAILED
в просмотрщике событий.