2009-06-15 10 views
6

Tengo dos dominios de Active Directory, A y B. Los usuarios del dominio A necesitan ejecutar una aplicación en sus escritorios para ver y manipular un recurso ubicado en un servidor en el dominio B. Cada usuario también tiene una cuenta en el dominio B. Es Es posible suplantar la identidad del dominio B de cada usuario para realizar operaciones en el recurso del dominio B de forma programática.¿Puedo suplantar a un usuario en un dominio diferente de Active Directory en .NET?

Ejemplo de flujo de trabajo:

  1. usuario inicia sesión en el dominio A.
  2. usuario lanza aplicación de escritorio.
  3. El usuario especifica el recurso en el dominio B.
  4. La solicitud solicita al usuario credenciales de dominio B.
  5. La aplicación suplanta la identidad del dominio de usuario B para acceder al recurso especificado.
  6. El usuario manipula un recurso de dominio B mediante la aplicación.

Respuesta

2

Hablaré en términos de las API de Win32, pero estoy bastante seguro de que puedes invocarlas desde .NET. Compruebe http://pinvoke.net.

Debe llamar a la API LogonUser para crear un token de acceso que represente las credenciales de dominio B del usuario.

Luego llama a ImpersonateLoggedOnUser, pasando el token de acceso. El hilo que llama se hará pasar por las credenciales del dominio B hasta que suplante un conjunto diferente de credenciales o llame a la API RevertToSelf.

supongo que no hace falta decir que, para la llamada LogonUser para tener éxito, la máquina se está ejecutando en tendrá que confiar en el dominio B.

+0

¿No es al revés? Quiero decir, ¿el Dominio B no tiene que confiar en el Dominio A? –

+0

No, no lo creo. No debe existir ninguna relación de confianza entre los dominios A y B. Sin embargo, dependiendo de a qué dominio pertenezca la máquina, puede haber alguna otra necesidad de confianza que no hayamos mencionado. – Martin

+0

Entiendo que LogonUser no autentica usuarios remotos. Intenté utilizar este método con WindowsImpersonationContext sin éxito. Usuario de Logon: http://msdn.microsoft.com/en-us/library/aa378184(VS.85).aspx Si este no es el caso, entonces estoy empezando a pensar que mis problemas pueden estar en otra parte. Puede ser un problema de confianza entre los dos dominios. Voy a verificar eso. –

1

Consulte this question, que cubre los problemas de suplantación que necesite.

+0

He visto esa pregunta y los enlaces que proporciona. No respondieron adecuadamente mi pregunta. La mayoría de los ejemplos que se encuentran dependen del método LogonUser que, según tengo entendido, no se autenticará contra una computadora remota. –

7

Si su equipo (el que hace la suplantación) es un miembro de un dominio que no confía en el dominio de la cuenta de usuario que está intentando suplantar, la suplantación fallará. Cualquiera que diga lo contrario, me gustaría ver pruebas.

+0

Exactamente. Lo que debe hacer es establecer una confianza entre los dos dominios de AD. Esto no es difícil de hacer, pero "abre" la seguridad entre los dos significativamente, y no es una decisión "neutral". Tiene muchas implicaciones. Ahora no sé si NECESITAS tener una relación de confianza para hacerse pasar, pero me sorprendería mucho que no lo hicieras. Pero sé que funciona si TIENES un fideicomiso (es algo que tuve que codificar en las últimas dos semanas). –

Cuestiones relacionadas