Вызов ChangePassword
, звонки IADsUser::ChangePassword
. Эта документация говорит, что она работает почти так же, как IADsUser::SetPassword
. Эта документация содержит больше информации. Действительно, только первый метод будет работать, когда вы запускаете его из-за пределов домена:
Во-первых, поставщик LDAP пытается использовать LDAP через 128-битное соединение SSL. Для успешной работы SSL LDAP на сервере LDAP должен быть установлен соответствующий сертификат проверки подлинности сервера, а клиенты, использующие код ADSI, должны доверять органу, выдавшему эти сертификаты. И сервер, и клиент должны поддерживать 128-битное шифрование.
Я предполагаю, что ваш LDAPString
имеет формат LDAP://example.com:636
(:636
является важной частью). Если вы можете читать такие данные, то сертификат SSL является доверенным. Так что это хорошо.
Единственным, возможно, недостающим элементом может быть 128-битное шифрование? Проверьте сертификат и посмотрите, возможно, он использует менее 128 бит. Хотя я был бы удивлен, если бы это было так.
В этом ответе есть небольшой фрагмент кода, который можно использовать для загрузки сертификата с любого сайта: https://stackoverflow.com/a/22251597/1202807
Просто используйте "https://example.com:636" в качестве «веб-сайта».
Существует также следующее:
В Active Directory вызывающий должен иметь право доступа расширенного контроля «Изменить пароль», чтобы изменить пароль с помощьюэтот метод.
Вы должны убедиться, что учетная запись пользователя, с которой вы проходите аутентификацию в LDAP, имеет разрешение на изменение пароля для учетной записи, которую вы пытаетесь обновить. В нашей среде Everyone
имеетРазрешение на изменение пароля (поскольку для этого вам все еще нужно предоставить старый пароль). Я думаю, что это значение по умолчанию, но его стоит проверить.