DirectoryServices. AccountManagement “старый” пароль все еще проверяет после изменения пароля

После изменения пользовательского пароля в Active Directory, если пользователь пытается войти в систему с помощью их старого пароля, следующий код проверяет как Верный:

Dim up As UserPrincipal = GetAdUser(objContext, arg_strBA, arg_strUsername)

If up IsNot Nothing Then

    Dim valid As Boolean = up.Context.ValidateCredentials(
    up.UserPrincipalName, arg_strPassword, ContextOptions.Negotiate)


    If (valid) Then strReturn = up.SamAccountName

End If

Мы изменяем пароль с помощью следующего кода:

Dim objUser As New DirectoryEntry(arg_strLDAPPath)

If Not objUser Is Nothing Then
    objUser.AuthenticationType = AuthenticationTypes.Secure


    objUser.Invoke("SetPassword", arg_strNewPW)
    objUser.CommitChanges()
end if

Сброс пароля хорошо работает, и пользователь может войти в систему с их новым паролем, но их старый пароль не должен все еще проверять.

Когда вышеупомянутый ValidateCredentials работает на старый пароль, мы присваиваем учетные данные вызову веб-сервиса, который затем перестал работать с "401: Несанкционированная" ошибка.

Кто-либо замеченный что-нибудь как это?

5
задан Luke Girvin 23 July 2019 в 09:20
поделиться

3 ответа

ВЫБЕРИТЕ COUNT (TS) из ТАБЛИЦЫ, где TABLE.TS МЕЖДУ (время начала, время окончания)

Метод Bind () устанавливает аутентифицированное соединение с одним из серверов AD с использованием указанных учетных данных. Проблема в том, что, когда PrincipalContext.ValidateCredentials устанавливает этот вызов (в вашем сценарии), он всегда устанавливает AuthType = Negotiate. В этом случае Kerberos фактически привыкает и завершается сбоем, но система возвращается к NTLM. "

1
ответ дан 14 December 2019 в 04:47
поделиться

Учли ли вы до 15 минут времени, что AD требует для распространения изменений, подобных этим, по всей сети ??

Марк

0
ответ дан 14 December 2019 в 04:47
поделиться

Я предполагаю, что вы выполняете ValidateCredentials на клиентском компьютере. Если это так, то старый (успешный) пароль кэшируется. Это сделано для того, чтобы пользователи могли войти, если Active Directory отключен или недоступен. Распространение изменений занимает некоторое время.

Если вы хотите обойти это, вы должны проходить аутентификацию на сервере, обслуживающем веб-сервис, во время аутентификации, а не на локальном клиентском компьютере.

0
ответ дан 14 December 2019 в 04:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: