es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo solucionar el error 1935 en la función LogonUser() de la API Win32.

Estoy intentando usar esta Función.

El usuario que intento suplantar no está en el mismo dominio.
Puedo montar el servidor usando las credenciales sin ningún problema.

Pero cada vez que llamo a LogonUser

bLogonSucc = ::LogonUser(sUserName
            , sDomain
            , sUserPW
            , LOGON32_LOGON_INTERACTIVE
            , LOGON32_PROVIDER_DEFAULT
            , &hToken);

Recibo el error 1935:

ERROR_AUTHENTICATION_FIREWALL_FAILED
1935 (0x78F)
El equipo al que estás intentando acceder está protegido por un firewall de autenticación. La cuenta especificada no tiene permiso para autenticarse en el equipo.

Mi objetivo es abrir un archivo en un servidor, donde se utiliza el usuario como inicio de sesión y abrir el archivo.

Si uso LOGON32_LOGON_NEW_CREDENTIALS como parámetro, la función LogonUser e impersonación funcionan, pero de alguna forma aún no funciona más adelante en el código.

No puedo encontrar una solución para esto.

¿Alguna idea de cómo solucionarlo?
El firewall debería estar configurado correctamente.

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Problemas con la función de Impersonation y LogonUser en C++ WinAPI

    Problema

    Como experto en IT especializado en C++, WinAPI y MFC, estás encontrando dificultades al utilizar la función LogonUser. Tu objetivo es abrir un archivo en un servidor utilizando las credenciales de inicio de sesión de un usuario para acceder al destino. Sin embargo, te encuentras con el siguiente error:

    ERROR_AUTHENTICATION_FIREWALL_FAILED
    1935 (0x78F)
    El equipo al que intentas acceder está protegido por un firewall de autenticación. La cuenta especificada no tiene permiso para autenticarse en el equipo.

    El usuario que estás intentando suplantar no está en el mismo dominio, pero puedes conectarte al servidor utilizando sus credenciales. Utilizaste la función LogonUser con los parámetros sUserName, sDomain y sUserPW, pero la respuesta es el error ERROR_AUTHENTICATION_FIREWALL_FAILED.

    Solución

    El error ERROR_AUTHENTICATION_FIREWALL_FAILED indica que hay un firewall de autenticación en su lugar, lo cual impide la suplantación de estas credenciales de usuario. Esto sugiere que el servidor utiliza una tecnología de Protección de Acceso a la Red (NAP) llamada servidor de políticas de salud, que verifica si los sistemas que intentan conectarse a la red cumplen con los requisitos de seguridad.

    En general, no se pueden enviar credenciales de usuario suplantadas a través de un firewall de autenticación. Por lo tanto, tu intento de abrir un archivo en un servidor utilizando credenciales de usuario suplantadas no funcionará.

    Si utilizas el parámetro LOGON32_LOGON_NEW_CREDENTIALS, la función LogonUser funcionará perfectamente, pero aún así no funcionará más adelante en el código.

    Por lo tanto, intenta crear una Compartición de Red y establece sus permisos en el servidor remoto de la siguiente manera:

    1. El usuario inicia sesión localmente en el servidor.
    2. Crea una compartición de red temporal.
    3. Otorga acceso al usuario para la compartición.
    4. Reinicia el servicio remoto y verifica si las credenciales del usuario ahora pueden iniciar sesión de forma remota.

    Si la solución anterior no funciona, intenta utilizar el protocolo de Administración Remota de Windows (WinRM) para conectarte al servidor remoto. Sin embargo, asegúrate de que WinRM esté habilitado para el servidor remoto.

    Espero que esto te ayude.

Comments are closed.