DirectoryServices.AccountManagement "Old"암호는 비밀번호 변경 후에도 여전히 유효성이 있습니다.

StackOverflow https://stackoverflow.com/questions/756726

문제

Active Directory에서 사용자 비밀번호를 재설정 한 후 사용자가 이전 비밀번호를 사용하여 로그인하려고하면 다음 코드가 true로 유효합니다.

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

비밀번호 재설정은 정상적으로 작동하며 사용자는 새 비밀번호로 로그인 할 수 있지만 이전 비밀번호는 여전히 유효성을 유지해서는 안됩니다.

위의 ValidAcredentials가 이전 비밀번호에 대해 작동하면 웹 서비스 호출에 자격 증명을 할당 한 다음 "401 : 무단"오류로 실패합니다.

이런 식으로 본 사람 있나요?

도움이 되었습니까?

해결책 3

나는 대답을 분담합니다 여기

링크에서 ...

"그러나 맥락은 맥락이하는 것입니다 ~ 아니다 Kerberos 만 사용하십시오. 특정 상황에서 (로컬이 아닌 광고를 지정하고 있고 최신 서버가 충분히 최신 서버가있는 경우) 코드는 무엇이든지 협상을 선택합니다. 그런 의미에서 밀봉을 지정한다는 것은 아마도 Kerberos를 사용하지만 반드시 독점적으로 사용하지는 않습니다. 실제로 중요한 깃발은 그 아래에 여러 층이 묻혀 있습니다. 표지 아래 에서이 방법은 LDAPConnection을 설정하고 연결에 대한 네트워크 자격 증명을 설정하고 AuthType (실제 플래그!)를 설정하고 최종적으로 BINT () 메소드를 호출합니다. ldapConnection.bind () 메소드는 지정된 자격 증명을 사용하여 AD 서버 중 하나에 대한 인증 된 연결을 설정합니다. 문제는 PrincipalContext.validAteCredentials 가이 호출을 설정할 때 (시나리오에서) 언제나 AuthType = 협상을 설정합니다. 이 경우 Kerberos는 실제로 사용되지 않고 실패하지만 시스템은 NTLM으로 돌아갑니다. "

다른 팁

이 문제는 코드와 관련이 없지만 범인이 듣는 것은 Active Directory입니다 ...

참조하시기 바랍니다 http://support.microsoft.com/kb/906305 솔루션을 위해 ...

이 작동 - 아래 솔루션을 참조하십시오.이 상점이 괜찮은 솔루션인지 여부에 따라 도움이되면 알려주십시오.

다음은 Active Directory에 대한 솔루션으로 변경된 후 이전 비밀번호가 작동 할 수 있습니다. 이 솔루션이 로그인 인증 중에 ChangePassword를 사용 하므로이 솔루션의 수용에 대한 피드백을 매우 좋아합니다. 이것은 이상한 일이지만 작동합니다. 현재 우리 상점은이 솔루션을 사용하지 않으므로 누군가가 사용 중인지 알려주는 경우 감사 할 것입니다.

감사합니다 Ch

활성 디렉토리 및 기존 암호는 유효한 유효한 (15 분에서 +시간)를 반환합니다. SetPassword 또는 ChangePassword가 호출 될 때 발생합니다.

역사:

나는 이것을 광고의 "기능"이라고하며 광고에 설계되어 사용자가 암호를 변경할 때 암호를 사용하는 모든 리소스가 새로운 암호로 전송할 수있는 일종의 유예 기간이 있습니다.

AD가 최신 암호를 알고 있다는 개념을 지원하는 광고의 한 가지 예는 PC에서 로그인 암호를 변경하는 것입니다.이 경우 컴퓨터는 이전 비밀번호를 로그인 할 수 없습니다. 나는 이것에 대한 답이 없지만 (Microsoft를 제외하고는 이것을 작동시켜야했다) PC가 관련되어 있고 비밀번호가있는 것처럼 보일 수있는 것만 큼 간단하지 않다는 것은 내 의견이다.

광고의 비밀번호 변경이 기간 동안 지속되는 방법을 보여주는 한 예제 : 다음과 같습니다.

Windows 7 PC에서 Windows Server 2008 R2 Box까지 원격 데스크탑을 사용합니다. Windows 보안 상자에서 로그인 한 다음 확인 상자가 나타나고 확인을 클릭하고 클릭하면 로그인했습니다. 이제 (Kirkman User와 다른), 로그 아웃 및 로그인으로 상자에 사용하지 않은 사용자의 비밀번호를 변경하십시오. 오래된 비밀번호로 다시 (15 분에서 1 시간 내에 +-). 기존 비밀번호는 Windows 보안 상자와 OK 박스를지나갑니다. 확인을 클릭하면 실패합니다. 원격 데스크탑에서 다시 시작하여 잘못된 비밀번호를 시도하면 "로그온 시도 실패"메시지와 함께 Windows 보안 상자에서 중지됩니다. 시간 제한이 만료 된 후에는 이전 비밀번호로 Windows 보안 상자를 지나치지 않습니다. (스위치 사용자가 예상대로 작용할 때마다 원격 데스크탑에서 시작해야합니다. 적어도 사용자 로그인은 아니지만 어느 정도 수준에서 (광고로 보이는 것)가 오래된 암호가 어느 정도 인증 할 수 있음을 보여줍니다.

연구 : 나는이 문제에 대한 많은 언급 과이 시점까지 우리가 그것을 구현할 수 있는지 판단 할 수 없었던 하나의 잠재적 솔루션 만 발견했습니다 (이것은 Kerberos를 통해 엄격하게 호출하는 것에 대한 참조입니다. 문서와 내 연구에 따라 나타날 수 있습니다). .NET에서 AD와 상호 작용하는 방법에 대한 많은 링크를 찾았지만 실제 광고 매뉴얼은 없습니다.

솔루션 솔루션 솔루션 - 솔루션 솔루션을 원한다면이 부분을 읽으십시오 !!! 현재 : 테스트 중에 우연히 AD에 대한 changePassword 호출이 올드 패드워드가 새로운 암호로 변경하는 데 성공할 수 없다는 것을 발견했습니다. 이 테스트를하는이 테스트는 실제로 사용중인 것에 대한 언급을 찾지 못한 것으로 알려져 있지 않다고 생각합니다. 실제로이 문제에 대한 해결책을 찾지 못했습니다. 어느 날 아침 오전 3시에 나는이 문제에 대한 솔루션을 제공하기 위해 ChangePassword 의이 사용을 악용 할 수 있다는 것을 깨달았습니다. 적어도 더 나은 접근 방식을 결정할 때까지 즉시 사용할 수있는 작업을 수행 할 수 있습니다.

먼저 모든 것이 유효하고 광고가 비밀번호가 유효한지 확인합니다. 그런 다음 OldPassword와 NewPassword가 사용자가 제공 한 비밀번호 (모두 동일)로 ChangePassword (username, Oldpassword, NewPassword)로 호출합니다. 나는 두 가지 중 하나 (아마도 3 개이지만 암호 정책 위반이 성공하지 못하게 함) 결과가 발생한다는 것을 알고 있습니다. OldPassword가 양호하고 비밀번호 정책이 충족되지 않기 때문에 실패하지 않거나 (히스토리, 새 암호는 마지막 N 비밀번호 중 하나가 될 수 없음) 이전 암호가 잘못 되었기 때문에 실패합니다 (둘 다 메시지에서 텍스트에 대한 예외 오류로 반환 됨). 이 마지막 조건을 확인하고 OldPassword가 유효하지 않은 경우 사용자가 로그인하지 않습니다.

미래 : 아마도 두 번째 눈이 도움이 될 것입니다.
솔루션이 사천이나 커버 로스에 있다고 생각합니다. 나는 솔루션으로 이것들 중 하나를 충분히 알아내는 데 성공하지 못했습니다. ChangePassword가 수행하기 때문에 AD가 이전 암호를 구별 할 수 있음이 분명합니다. 우리가하는 일은 보안의 핵심이므로 모든 것이 열려있는 것은 아닙니다 (광고에서 암호 기록을 볼 수있는 능력과 같이 액세스 방법을 찾지 못했습니다).

광고가 네트워크 전체에서 그 변화를 전파해야한다는 점을 고려하여 최대 15 분의 시간을 고려 했습니까?

마크

클라이언트 컴퓨터에서 validecredentials가 실행된다고 가정합니다. 이 경우 예전 (성공한) 암호가 캐시되었습니다. 이는 Active Directory가 오프라인이거나 도달 할 수없는 경우 사용자가 로그인 할 수 있도록 수행됩니다. 변화를 전파하는 데 시간이 걸립니다.

이 문제를 해결하려면 로컬 클라이언트 시스템 대신 인증 시간에 웹 서비스를 제공하는 서버를 인증해야합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top