2009-03-05 4 views
0

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?

Répondre

1

Vous ne pouvez pas utiliser l'emprunt d'identité dans cette situation. Le compte que vous personnifiez a besoin de 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 Tant102 des services Web est votre seule voie à suivre.

+0

Vous avez raison .. trop de café – kitsune

0

Je voudrais regarder dans 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 consigner les échecs dans le journal de sécurité.

Il est plus facile de configurer des services web sur vos serveurs, de préférence protégés par des logins et/ou des restrictions IP, qui effectuent ce genre d'opérations.