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.Gestion ADSI/IIS et usurpation d'identité ASP.NET
J'ai écrit un petit contrôleur d'emprunt d'identité qui utilise l'API win32 et sa méthode LogonUser. J'utilise ensuite System.DirectoryServices et le fournisseur ADSI IIS pour créer un nouveau site.
J'ai la routine suivante (échangé quelques valeurs avec des chaînes en clair pour une meilleure lisibilité):
if (impersonationSvc.ImpersonateValidUser("[email protected]", 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 quand j'utilise le serveur de l'application Web est hébergé sur (SRV6). Un nouveau site est créé.
Si je SRV5 par exemple, un autre serveur sur notre réseau (sans domaine), ImpersonateValidUser fonctionne, le DirectoryEntry est créé, mais w3svc.Invoke échoue avec l'erreur suivante:
[COMException (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
...
Tout le monde sait comment je pourrais résoudre ce problème?
Vous avez raison .. trop de café – kitsune