Pregunta

Estoy en el proceso de escribir una pequeña aplicación web que me permita administrar varias instalaciones de IIS en diferentes servidores de nuestra red. No tenemos controlador de dominio.

He escrito un pequeño controlador de suplantación que utiliza la API de win32 y su método LogonUser. Luego utilizo System.DirectoryServices y el proveedor ADSI de IIS para crear un nuevo sitio.

Tengo la siguiente rutina (intercambié algunos valores con cadenas de texto claro para una mejor legibilidad):

            if (impersonationSvc.ImpersonateValidUser("Administrator@SRV6", String.Empty, "PASSWORD))
            {


            string metabasePath = "IIS://" + server.ComputerName + "/W3SVC";
            DirectoryEntry w3svc = new DirectoryEntry(metabasePath, "Administrator", "PASSWORD");

            string serverBindings = ":80:" + site.HostName;
            string homeDirectory = server.WWWRootNetworkPath + "\\" + site.FolderName;


            object[] newsite = new object[] { site.Name, new object[] { serverBindings }, homeDirectory };

            object websiteId = (object)w3svc.Invoke("CreateNewSite", newsite);
            int id = (int)websiteId;

            impersonationSvc.UndoImpersonation();
        }

Esta rutina funciona cuando uso el servidor en el que se aloja la aplicación web (SRV6). Se crea un nuevo sitio.

Si uso SRV5 por ejemplo, otro servidor en nuestra red (sin dominio), ImpersonateValidUser funciona, se crea DirectoryEntry, pero w3svc.Invoke falla con el siguiente error:

[COMException (0x80070005): acceso denegado]

System.DirectoryServices.DirectoryEntry.Bind(Boolean throwIfFail) +377678
System.DirectoryServices.DirectoryEntry.Bind() +36
System.DirectoryServices.DirectoryEntry.get_NativeObject() +31
System.DirectoryServices.DirectoryEntry.Invoke(String methodName, Object[] args) +53

...

¿Alguien sabe cómo podría resolver esto?

¿Fue útil?

Solución

No puede usar la suplantación en esta situación. La cuenta que está suplantando necesita privilegios de inicio de sesión en la máquina local.

Si sus servidores web no forman parte de un dominio, creo que la idea de los servicios web de Tant102 es su única forma de proceder.

Otros consejos

Buscaría en el registro de eventos de SRV5 para verificar qué privilegios se utilizan cuando se conecta a ese servidor. Es posible que deba cambiar sus políticas de grupo para registrar fallas en el registro de seguridad.

Parece más fácil configurar servicios web en sus servidores, preferiblemente protegidos por inicios de sesión y / o restricciones de IP, que realizan este tipo de operaciones.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top