sto usando LogonUser per convalidare un set di credenziali di dominio di un utente.Come utilizzare LogonUser per non utilizzare le credenziali memorizzate nella cache?
LogonUser(accountName, domain, password,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, ref token);
Con risultati preoccupanti:
LogonType Current Password Old password
=========== ============================== ========================
Network Succeeds Succeeds
Batch Fails (0x00000569) Fails (invalid password)
Interactive Succeeds Fails (invalid password)
codici di errore:
0x00000569
: Errore durante l'accesso: l'utente non ha ottenuto il tipo di accesso richiesto a questo computer0x0000052E
: Errore di accesso: Unk nown nome utente o password
Dettagli:
- se l'utente inserisce validi credenziali La funzione restituisce
true
. (buono) se l'utente inserisce non validi credenziali La funzione restituisce
false
. (buono)se l'utente cambia la password, ed entra i loro nuovi validi credenziali La funzione restituisce
true
. (buono)se l'utente inserisce non validi credenziali La funzione restituisce
false
. (buono)se l'utente inserisce i propri vecchi credenziali la funzione restituisce
true
. (male)
Nota: se l'utente passa a una macchina diversa (uno che non hanno mai connesso al precedente), ed entrano vecchi credenziali,
LogonUser
continua a return true. Ciò significa che la memorizzazione nella cache non sta avvenendo sul computer locale, ma in qualche modo "sulla rete".
- se l'utente cambia la password nuovo, e entra nelle loro nuovi nuove credenziali, la funzione restituisce
true
.(buono) - se l'utente inserisce i propri vecchi credenziali la funzione restituisce
true
. (cattivo) - se l'utente inserisce i propri vecchi vecchi credenziali La funzione restituisce
false
. (buono)
Come, quando si chiama LogonUser
can i istruzioni al fine di istruire il dominio non utilizzare credenziali memorizzate nella cache.
Nota: Se l'utente tenta di accedere a Windows con il loro vecchio (o vecchio vecchio) la password, ottengono l'errore password non valida.
Da MSDN:
LOGON32_LOGON_NETWORK
Questo tipo di accesso è destinato per server ad alte prestazioni per l'autenticazione password in chiaro. La funzione LogonUser non memorizza nella cache le credenziali per questo tipo di accesso.
LOGON32_LOGON_INTERACTIVE
Questo tipo di accesso è destinato a utenti che saranno interattivamente tramite il computer, ad esempio un utente che viene connesso da un server terminal, shell remota, o un processo simile. Questo tipo di accesso ha la spesa aggiuntiva di informazioni di accesso nella cache per le operazioni disconnesse; pertanto, è inappropriato per alcune applicazioni client/server, ad esempio un server di posta.
LOGON32_LOGON_BATCH
Questo tipo di accesso è destinato per i server batch, in cui i processi possono essere in esecuzione per conto di un utente senza il suo intervento diretto. Questo tipo è anche per server con prestazioni più elevate che elaborano numerosi tentativi di autenticazione in testo normale alla volta, come server di posta o web.
i sono autenticazione password di testo, e in modo da utilizzare LOGON32_LOGON_NETWORK
. Interactive credenziali di accesso alla cache, che non sono consentite qui. Batch, mentre non documentato su quando dovrebbe essere usato, semplicemente fallisce.
Aggiornamento: Il dominio consente solo:
- la password precedente (non ulteriormente indietro)
- solo per 60 minuti
E 'chiaro a me che si tratta di una "funzionalità" di Active Directory che offre un periodo di prova di 1 ora.
Tranne che non desidero il periodo di prova e non voglio modificare alcuna impostazione sul dominio (poiché non conosco alcuna impostazione sul dominio che consentirebbe un periodo di tolleranza di un'ora di utilizzo di la tua vecchia password).
i * am * utilizzando 'LOGON32_PROVIDER_WINNT50' - non * voglio * utilizzare NTLM privato. Quindi, la domanda diventa implicitamente "Come posso utilizzare Kerberos anziché l'autenticazione NTLM?". Ma la domanda di * "Perché' LogonUser' usa NTLM piuttosto che Kerberos? "* È una che né StackOverflow [né ServerFault sembrano essere in grado di rispondere] (http://serverfault.com/questions/384719/how-to -assicurare-machine-è-Kerberos al dominio). –