Question

Je suis en train d'écrire une petite application Web qui me permettrait de gérer plusieurs installations IIS sur différents serveurs de notre réseau. Nous n'avons pas de contrôleur de domaine.

J'ai écrit un petit contrôleur d'usurpation d'identité qui utilise l'API win32 et sa méthode LogonUser. J'utilise ensuite System.DirectoryServices et le fournisseur ADIS IIS pour créer un nouveau site.

J'ai la routine suivante (échangé des valeurs avec des chaînes en texte clair pour une meilleure lisibilité):

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

Cette routine fonctionne lorsque j'utilise le serveur sur lequel l'application Web est hébergée (SRV6). Un nouveau site est créé.

Si j'utilise SRV5 par exemple, un autre serveur de notre réseau (sans domaine), ImpersonateValidUser, fonctionne, DirectoryEntry est créé, mais w3svc.Invoke échoue avec l'erreur suivante:

[Exception COM (0x80070005): accès refusé]

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

...

Quelqu'un sait comment résoudre ce problème?

Était-ce utile?

La solution

Vous ne pouvez pas utiliser l'emprunt d'identité dans cette situation. Le compte que vous personnifiez doit avoir des privilèges de connexion sur la machine locale.

Si vos serveurs Web ne font pas partie d'un domaine, je pense que l'idée de services Web de Tant102 est votre seule solution.

Autres conseils

J'examinerais le journal des événements de SRV5 pour vérifier quels privilèges sont utilisés lorsque vous vous connectez à ce serveur. Vous devrez peut-être modifier vos stratégies de groupe pour enregistrer les échecs dans le journal de sécurité.

Il semble plus facile de configurer des services Web sur vos serveurs, de préférence protégés par des connexions et / ou par des restrictions ip, qui effectuent ce type d'opérations.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top