Domanda

Sto scrivendo una piccola app Web che mi consentirebbe di gestire diverse installazioni IIS su server diversi sulla nostra rete. Non abbiamo controller di dominio.

Ho scritto un piccolo controller di rappresentazione che utilizza l'API win32 e il suo metodo LogonUser. Quindi uso System.DirectoryServices e il provider ADSI IIS per creare un nuovo sito.

Ho la seguente routine (scambiato alcuni valori con stringhe in chiaro per una migliore leggibilità):

            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();
        }

Questa routine funziona quando uso il server su cui è ospitata l'app Web (SRV6). Viene creato un nuovo sito.

Se uso SRV5 per esempio, un altro server sulla nostra rete (senza dominio), ImpersonateValidUser funziona, DirectoryEntry viene creato, ma w3svc.Invoke fallisce con il seguente errore:

[COMException (0x80070005): accesso negato]

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

...

Qualcuno sa come potrei risolverlo?

È stato utile?

Soluzione

Non è possibile utilizzare la rappresentazione in questa situazione. L'account che stai impersonando necessita dei privilegi di accesso sul computer locale.

Se i tuoi server web non fanno parte di un dominio, penso che l'idea di Tant102 di servizi web sia la tua unica strada da percorrere.

Altri suggerimenti

Esaminerei il registro eventi di SRV5 per verificare quali privilegi vengono utilizzati quando ci si connette a quel server. Potrebbe essere necessario modificare i criteri di gruppo per registrare gli errori nel registro di sicurezza.

Sembra più facile configurare i servizi web sui tuoi server, preferibilmente protetti da accessi e / o restrizioni ip, che eseguono questo tipo di operazioni.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top