DirectoryServices.AccountManagement password “vecchio” convalida ancora dopo la modifica della password

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

Domanda

Dopo il ripristino di una password gli utenti in Active Directory, se l'utente tenta di accedere utilizzando la loro vecchia password, il codice seguente convalida come 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

Siamo la reimpostazione della password utilizzando il seguente codice:

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

La reimpostazione della password funziona bene e l'utente può effettuare l'accesso con la nuova password, ma la loro vecchia password non deve ancora convalidare.

Quando i ValidateCredentials sopra lavora per la vecchia password, stiamo assegnando le credenziali per una chiamata di servizio web, che poi fallisce con un "401: non autorizzato". Errore

Chiunque visto nulla di simile?

È stato utile?

Soluzione 3

I fonte la risposta Qui

Dal link ...

"Tuttavia, ciò che conta è che ContextOption non garantire l'uso di un solo Kerberos. Si scopre che in determinate situazioni (come se si specifica dC, piuttosto che locali, e si dispone di un sufficiente fino al server data), il codice sceglie di fare negoziare non importa cosa. In questo senso, specificando tenuta probabilmente significa che utilizzerà Kerberos, ma non necessariamente in esclusiva. la bandiera che conta davvero è sepolto diversi strati sotto quella. sotto le coperte , questo metodo finisce per stabilire un LdapConnection, impostando le credenziali di rete per la connessione, l'impostazione che AuthType (la bandiera reale che conta!), e, infine, chiamando il metodo Bind (). il metodo LdapConnection.Bind () stabilisce una connessione autenticata uno dei server degli annunci utilizzando le credenziali specificate. il problema è che quando PrincipalContext.ValidateCredentials imposta questa chiamata (nel vostro scenario), ma sempre imposta l'AuthType = negoziare. in questo caso, Kerberos fa in infatti ottenere usato, e finisce per fallire, ma il sistema ricade a NTLM. "

Altri suggerimenti

Questo problema non è correlato al codice, ma il colpevole sopra sentire è la directory di Active ...

Si prega di fare riferimento http://support.microsoft.com/kb/906305 per soluzione. ..

Questo funziona - Vedere soluzione qui di seguito -. Per favore fatemi sapere se è risultato utile come il nostro negozio è diviso sulla questione se questa è una soluzione OK

La seguente è una soluzione ad Active Directory che consente Vecchia password al lavoro dopo essere cambiato. Mi piacerebbe molto un feedback sulla accettazione di questa soluzione in quanto utilizza il ChangePassword durante l'autenticazione Login. Questa è una cosa strana da fare, ma funziona. Attualmente il nostro negozio non sta utilizzando questa soluzione così se qualcuno mi può dire se stanno usando o no, che sarebbe apprezzato.

Grazie Ch

Active Directory e le vecchie password validi ritorno (15 minuti a + - ora). Ciò si verifica quando SetPassword o ChangePassword vengono invocati.

La storia:

Trovo che questo si chiama una “caratteristica” di AD ed è di progettazione integrato in AD in modo che quando un utente cambia le password c'è una sorta di periodo di grazia che permette tutte le risorse utilizzando le password per il trasferimento verso il nuovo .

Un esempio di AD che supporta il concetto che AD conosce l'ultima parola è quella di cambiare una password di accesso su un PC - in questo caso il computer non permetterà la vecchia password per effettuare il login. Anche se non ho la risposta a questa (diverso da Microsoft ha dovuto arrivare a questo lavoro) è mia opinione che questo non è così semplice come può apparire come il PC è coinvolto e ha le password su di esso troppo.

Un esempio che mostra come i cambiamenti delle password in ANNUNCIO durano per un periodo di tempo può essere:

Uso di Desktop remoto da un PC Windows 7 a una finestra di Windows Server 2008 R2. Effettua il login dal Security Box Windows la, fare clic su OK appare scatola, fare clic su OK e si è connessi. Ora Cambia la tua password per l'utente utilizzato per Remote nella scatola con (diverso dal vostro utente Kirkman ??), logout e login ancora una volta con la vecchia password (entro i termini di 15 minuti a un'ora + -). La vecchia password ti porterà oltre il dialogo Protezione di Windows e al Box OK. Quando si fa clic su OK sarà poi fallire. Se ricominciare da desktop remoto e tenta una password errata sarete fermati al dialogo protezione di Windows con il messaggio “il tentativo di accesso non riuscito”. Dopo la scadenza del termine non sarà possibile ottenere oltre il dialogo Protezione di Windows con la vecchia password. (Assicurati di iniziare da desktop remoto ogni volta che NON cambiare utente che fungeranno come previsto, che mostra anche che il PC in qualche modo coinvolto). Almeno non fa il login utente - ma questo non mostra che (quello che sembra essere dC) a un certo livello permette vecchie password per l'autenticazione a un certo livello

.

Ricerca: Ho trovato molti riferimenti a questo problema e solo una possibile soluzione che a questo punto non sono stato in grado di determinare se siamo in grado di implementare (questo è il riferimento a chiamare rigorosamente tramite Kerberos e non NTLM che non è così semplice come può appaiono in base alla documentazione e la mia ricerca). Ho trovato molti collegamenti a come interagire con AD in .NET ma nessun manuale dC reale.

Soluzione Soluzione SOLUZIONE - Leggere questa parte se si desidera che la Soluzione Soluzione !!! Presente: Ho trovato (per caso durante i test) che la chiamata ChangePassword di AD non permetterà al PasswordPrecedente passò ad esso riuscire a cambiare la password per la nuova password. E 'mia opinione che questo test che fa il lavoro non è in realtà conosciuta come non ho trovato alcun riferimento al loro utilizzo. Io in realtà non ho trovato alcuna soluzione a questo problema. Una mattina alle 3:00 mi sono reso conto che avrei potuto sfruttare questo uso di ChangePassword per fornire una soluzione a questo problema -. Almeno un work-around possiamo utilizzare immediatamente fino a quando siamo in grado di determinare un approccio migliore

Per prima cosa controllare che tutto sia valida e AD riporta che la password è valida. Poi una chiamata a ChangePassword (nome utente, oldpassword, newpassword) con la oldpassword e newpassword come password fornita dall'utente (sia lo stesso) è fatto. So che uno dei due (forse tre, ma i pasviolazione delle norme spada impedisce di riuscire) risultati accadrà. O il PasswordPrecedente è buono e non riusciamo, perché il Criterio password non sia soddisfatto (storia, nuova password non può essere uno degli ultimi password N) o non riusciamo, perché la vecchia password non è corretta (sia restituito come Errore di eccezione con il testo in un messaggio). Controlliamo per quest'ultima condizione e se l'oldpassword non è valido non lasciamo il registro utente.

Il futuro: Forse una seconda serie di occhi vi aiuterà.
Credo che la soluzione è in rappresentazione o Kerberos. Non ho avuto successo nel trovare fuori abbastanza su uno di questi come soluzioni. E 'ovvio che AD può distinguere tra vecchie password perché il ChangePassword lo fa. Quello che stiamo facendo è il cuore della sicurezza in modo non tutto è aperto (come la possibilità di vedere la storia password dC, non ho trovato un modo per accedervi).

Hai preso il fino a 15 minuti di tempo in considerazione che AD richiede per propagare le modifiche del genere in tutta la rete ??

Marc

presumo che sei ValidateCredentials esegue su una macchina client. Se questo è il caso, allora è il vecchio (di successo) password memorizzata nella cache. Questo viene fatto per consentire agli utenti di effettuare il login se Active Directory non è in linea o non raggiungibile. Propagazione delle modifiche richiede un certo tempo.

Se si desidera ottenere intorno a questo, si dovrebbe eseguire l'autenticazione con il server servire il servizio Web al momento l'autenticazione al posto del computer client locale.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top