net impersonate asp c# asp.net-mvc impersonation

c# - impersonate asp net



SuplantaciĆ³n en ASP.NET MVC (1)

Tengo una aplicación web MVC en una intranet y quiero poder crear archivos en nuestro servidor FTP para enviarlos a socios externos.

El código para la suplantación utiliza WindowsImpersonationContext.

System.Security.Principal.WindowsImpersonationContext impersonationContext; impersonationContext = ((System.Security.Principal.WindowsIdentity)User.Identity).Impersonate(); StreamWriter sw = System.IO.File.CreateText("PathOnFTPServer"); sw.Write("data"); impersonationContext.Undo();

Esto es lo que está pasando y el motivo de mi pregunta:

Pre personificación

User.Identity.Name: [mis credenciales de Windows]

System.Security.Principal.WindowsIdentity.GetCurrent (). Nombre: NT AUTHORITY / NETWORK SERVICE

Post personificación

User.Identity: [mis credenciales de Windows]

GetCurrent.Name: [mis credenciales de Windows]

Hacerse pasar por Deshacer

User.Identity: [mis credenciales de Windows]

GetCurrent.Name: NT AUTHORITY / NETWORK SERVICE

Entonces, antes de que me haga pasar por un personaje, el usuario actual es la cuenta del sistema, pero después de la suplantación, está usando mi cuenta de dominio de Windows que tiene permiso para crear archivos de texto en el servidor FTP. El código funciona localmente mediante el servidor web de Visual Studio, pero no cuando lo implemento en IIS en nuestro servidor de prueba.

Estoy obteniendo un error de acceso denegado. ¿Cuál sería la razón del error cuando se personifica al usuario correcto?


La suplantación permite la imitación de máquina a máquina, por lo que el navegador del cliente y el servidor están en la misma página cuando se trata de la suplantación. Cuando intenta acceder a la red compartida, la computadora no confía en las credenciales suplantadas.

Debe habilitar la delegación para la máquina IIS en Active Directory. Vaya a Usuarios y computadoras de Active Directory, busque la computadora, haga clic en Propiedades y ''Confiar en la computadora para la delegación''. (Es posible que deba reiniciar IIS para que esto funcione, no lo recuerdo).

Hay más teoría que esta que no entiendo completamente, pero esto debería funcionar. Si es correcto o no, alguien más podría comentar!

Además, la razón por la que funciona en su máquina de desarrollo es que el servidor de desarrollo se ejecuta como desarrollador, no (Local) / Servicio de red.

Un enlace decente:

http://msdn.microsoft.com/en-us/library/cc949004.aspx

¿Cuál es la diferencia entre la suplantación y la delegación?

La suplantación transfiere la identidad de la persona que llama original a los recursos de back-end en la misma computadora. La delegación transfiere la identidad de la persona que llama original a los recursos de back-end en computadoras distintas a la computadora que ejecuta el servicio.

Por ejemplo, si un servicio se está ejecutando dentro de IIS sin suplantación, el servicio accederá a los recursos utilizando la cuenta ASP.NET en IIS 5.0 o la cuenta del servicio de red en IIS 6.0. Con la suplantación, si el cliente se conecta utilizando la cuenta del llamante original, el servicio accederá a recursos como una base de datos de SQL Server en la misma máquina utilizando la cuenta del llamante original en lugar de la cuenta ASP.NET del sistema. La delegación es similar, excepto que la base de datos de SQL Server podría estar en una máquina diferente que sea remota al servicio.