2011-09-20 16 views
6

He estado tratando de usar LogonUser(...) para obtener un token de acceso para una cuenta de usuario, como en this MSDN sample.¿Por qué no funciona LogonUser (...) para cuentas de dominio?

// Call LogonUser to obtain a handle to an access token. 
bool returnValue = LogonUser(userName, domainName, Console.ReadLine(), 
    LOGON32_LOGON_INTERACTIVE, LOGON32_PROVIDER_DEFAULT, 
    out safeTokenHandle); 

Cuando ejecuto la muestra (con privilegios de administrador) que funciona bien cuando se les da un dominio de . y un nombre de cuenta de usuario y contraseña local, pero no importa lo que hago me sale el código de error fallo de 1326 (de inicio de sesión : nombre de usuario desconocido o contraseña incorrecta) si intento usar una cuenta de dominio. Obtengo el mismo resultado si ingreso basura para el dominio, lo que me hace preguntarme si realmente se está contactando con el DC.

¿Qué podría estar impidiendo que funcione?

+1

Eso podría deberse a un montón de cosas desafortunadamente. ¿La máquina está conectada al dominio? ¿El usuario del dominio puede iniciar sesión en esa máquina? ¿La configuración de DNS está configurada correctamente? (Vi un artículo de Citrix que sugería que esto podría ser un problema). El siguiente artículo contiene información sobre lo que sucede cuando ingresas basura para el dominio: https://groups.google.com/group/microsoft.public.dotnet.languages.csharp/msg/dccfbf8b76120401?pli=1 –

+0

. Validado que esto funciona sin la llamada Console.ReadLine() (por ejemplo, el suministro de una contraseña como una cadena directamente)? –

+0

No importa de dónde provenga la contraseña; es una cadena cuando se pasa a 'LogonUser'. – GraemeF

Respuesta

0

Uso DOMAIN\LOGIN con un nombre de dominio vacío para ese caso ...

+0

Obtengo el mismo error para 'DOMINIO \ NOMBRE DE USUARIO' y' NOMBRE DE USUARIO @ DOMINIO' con un nombre de dominio nulo pasado a 'Usuario de inicio de sesión'. – GraemeF

1

En mi caso fue el hecho de que, a pesar de que ha estado conectado al ordenador como un usuario de dominio, mi equipo no era en sí mismo parte de la dominio. Una vez agregado al dominio, la muestra comenzó a funcionar.

+7

¿Cómo inicias sesión en tu computadora como un usuario de dominio cuando no está unido a un dominio? – WilfriedVS

1

En mi caso, el problema, similar al de la pregunta asker, era que la cuenta a la que intentaba autenticar estaba en un dominio al que mi máquina actual no pertenecía. A diferencia del póster original, mi máquina no debería ni podría formar parte de este otro dominio. Sin embargo, quería que el inicio de sesión realizara acciones en un recurso en este dominio.

La respuesta fue la siguiente

bool success = LogonUser(
       userName, 
       domain, 
       password, 
       (int)LOGON32_LOGON_NEW_CREDENTIALS, //9 
       (int)LOGON32_PROVIDER_DEFAULT, //0 
       out userToken); 

con las siguientes constantes definidas:

public const int LOGON32_LOGON_NEW_CREDENTIALS = 9; 
public const int LOGON32_PROVIDER_DEFAULT = 0; 

Esperamos que esto ayudará a otros que están perdidos en una situación similar.

Cuestiones relacionadas