Frage

Ich bin im Begriff, einen kleinen Web-App zu schreiben, die mich erlauben würden, mehr IIS-Installationen auf verschiedene Servern in unserem Netzwerk zu verwalten. Wir haben keinen Domänencontroller.

Ich habe einen kleinen Identitätswechsel Controller geschrieben, der die win32 api und seine Logonuser-Methode verwendet. Ich benutze dann System.DirectoryServices und ADSI-Anbieter eine neue Website zu erstellen.

Ich habe die folgende Routine (ausgetauscht einige Werte mit Klartextzeichenfolgen für eine bessere Lesbarkeit):

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

Diese Routine funktioniert, wenn ich den Server der Web-App verwenden, wird auf (SRV6) gehostet. Eine neue Website erstellt wird.

Wenn ich SRV5 zum Beispiel, ein anderer Server in unserem Netzwerk verwenden (ohne Domäne), arbeitet ImpersonateValidUser wird die Directory erstellt, aber w3svc.Invoke schlägt mit dem folgenden Fehler:

[COMException (0x80070005): Zugriff verweigert]

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

...

Jeder weiß, wie ich dieses Problem lösen könnte?

War es hilfreich?

Lösung

Sie können nicht Identitätswechsel in dieser Situation verwenden. Das Konto, das Sie Bedarf anmelden Privilegien auf dem lokalen Rechner sind Identitätswechsel.

Wenn Ihr Web-Server nicht Teil einer Domäne ist, glaube ich Tant102 Idee von Web-Service Ihr einziger Weg zu gehen.

Andere Tipps

Ich würde Blick in die eventlog von SRV5 zu prüfen, welche Privilegien verwendet werden, wenn Sie zu diesem Server verbinden. Sie können Ihre Gruppenrichtlinien ändern müssen Ausfälle im Sicherheitsprotokoll zu protokollieren.

Es klingt einfacher aufzusetzen einen Web Service auf dem Server, geschützt vorzugsweise von Logins und / oder IP-Einschränkungen, dass diese Art von Operationen der Fall ist.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top