estoy usando LogonUser para validar un conjunto de credenciales de dominio de un usuario.¿Cómo hacer que LogonUser no use credenciales en caché?
LogonUser(accountName, domain, password,
LOGON32_LOGON_NETWORK, LOGON32_PROVIDER_WINNT50, ref token);
con resultados inquietantes:
LogonType Current Password Old password
=========== ============================== ========================
Network Succeeds Succeeds
Batch Fails (0x00000569) Fails (invalid password)
Interactive Succeeds Fails (invalid password)
códigos de falla:
0x00000569
: Error de inicio: el usuario no se ha concedido el tipo de inicio de sesión en este equipo0x0000052E
: Error de inicio de sesión: Desconectar nown nombre de usuario o contraseña
Detalles:
- si el usuario introduce válidos credenciales de la función devuelve
true
. (bueno) si el usuario introduce no válidas las credenciales la función devuelve
false
. (buena)si el usuario cambia su contraseña, y entra en sus nuevas credenciales válidos la función devuelve
true
. (buena)si el usuario introduce no válidas las credenciales la función devuelve
false
. (buena)si el usuario introduce sus credenciales viejos la función devuelve
true
. (malo)
Nota: si el usuario se mueve a una máquina diferente (uno que nunca han conectaron a antes), y entran viejos credenciales,
LogonUser
sigue return true. Esto significa que el almacenamiento en caché no está ocurriendo en la máquina local, pero de alguna manera "en la red".
- si el usuario cambia su contraseña de nuevo , y entra en sus nuevas nuevas credenciales, la función devuelve
true
.(bueno) - si el usuario introduce sus credenciales viejos la función devuelve
true
. (malo) - si el usuario introduce sus viejos viejos credenciales de la función devuelve
false
. (buena)
Cómo, al llamar LogonUser
¿Puedo darle instrucciones para instruir el dominio de no usar credenciales almacenadas en caché .
Nota: Si el usuario intenta iniciar sesión en Windows con su edad (o edad de edad) la contraseña, consiguen error de contraseña no válido.
De MSDN:
LOGON32_LOGON_NETWORK
Este tipo de inicio de sesión está destinada a servidores de alto rendimiento para autenticar las contraseñas en texto plano. La función LogonUser no almacena en caché las credenciales para este tipo de inicio de sesión.
LOGON32_LOGON_INTERACTIVE
Este tipo de inicio de sesión está destinado a usuarios que serán interactiva utilizando el ordenador, tal como un usuario que se está conectado por un servidor terminal, alejado de la cáscara, o un proceso similar. Este tipo de inicio de sesión tiene el gasto adicional de información de inicio de sesión de almacenamiento en caché para las operaciones desconectadas; por lo tanto, es inapropiado para algunas aplicaciones cliente/servidor, como un servidor de correo.
LOGON32_LOGON_BATCH
Este tipo de inicio de sesión está destinado a los servidores por lotes, donde los procesos pueden estar ejecutándose en nombre de un usuario sin su intervención directa. Este tipo también es para servidores de mayor rendimiento que procesan muchos intentos de autenticación de texto plano a la vez, como correo o servidores web.
i soy autenticación de contraseñas de texto sin formato, y por lo tanto el uso de LOGON32_LOGON_NETWORK
. Interactivo credenciales de caché de inicio de sesión, que no está permitido aquí. El lote, aunque no está documentado cuando debería usarse, simplemente falla.
actualización: El dominio sólo permite:
- la contraseña anterior (no más lejos hacia atrás)
- por 60 minutos
Es claro para mí que es una "característica" de Active Directory que otorga un período de gracia de 1 hora.
Excepto que no quiero el período de gracia, y no quiero cambiar ninguna configuración en el dominio (ya que no conozco ninguna configuración en el dominio que permita un período de gracia de uso de una hora de su contraseña anterior).
i * am * usando 'LOGON32_PROVIDER_WINNT50' - no deseo * utilizar * NTLM privado. Entonces, cuestionar se convierte implícitamente en "¿Cómo puedo usar Kerberos en lugar de la autenticación NTLM?". Pero la pregunta de * "¿Por qué' LogonUser' utilizando NTLM en lugar de Kerberos? "* Es una que ni StackOverflow [ni ServerFault parecen ser capaces de responder] (http://serverfault.com/questions/384719/how-to -ensure-machine-is-kerberos-domain-joined). –