2009-11-18 5 views
2

J'ai un WCF serveur en cours d'exécution sur IIS 6 à l'aide d'un pool d'applications avec une identité personnaliséefenêtres WCF authentification avec IIS et le pool d'applications

en ce moment la j'ai regardé sur le web pendant deux jours et je ne trouve pas le réponse exacte à mon problème. Je sais qu'il y en a beaucoup de semblables là-bas

Sur IIS6, le répertoire virtuel a un accès anonyme désactivé et l'authentification Windows intégrée est activée. Le compte de service est sur le même domaine que la machine. Je l'appellerai svcE. J'ai ajouté svcE au groupe IIS_WPG. Maintenant, le premier problème est lorsque je sélectionne ce pool d'applications avec svcE pour travailler sur le répertoire virtuel, appelez-le appDir, puis quand je navigue vers appDir, je reçois les informations d'identification mais si j'utilise le compte de service réseau vérifiez que je suis connecté comme moi. Ce que je veux faire, c'est faire tourner le service sous le compte svE car il a accès à la base de données, sans mettre cette information dans le fichier WebConfig.

J'ai un service Web avec le fichier de configuration

<authentication mode="Windows"/> 

<bindings> 
     <basicHttpBinding> 
      <binding name="default"> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows"/> 
       </security>     
      </binding> 
     </basicHttpBinding> 
    </bindings> 

<endpoint address="" binding="basicHttpBinding" bindingConfiguration="default" contract="<removed>"> 
<identity> 
    <dns value="localhost" /> 
</identity> 
</endpoint> 

La configuration Web en utilisant le service a

<basicHttpBinding> 
      <!-- Create one Binding for all three services, save space--> 
      <binding name="BasicHttpBinding_PricingService" closeTimeout="00:01:00" 
       openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
       allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
       messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" 
       useDefaultWebProxy="true"> 
       <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" 
        maxBytesPerRead="4096" maxNameTableCharCount="16384" /> 
       <security mode="TransportCredentialOnly"> 
        <transport clientCredentialType="Windows" proxyCredentialType="Windows" 
         realm="" /> 
        <message clientCredentialType="UserName" algorithmSuite="Default" /> 
       </security> 
      </binding> 

     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="<address>.svc" 
      binding="basicHttpBinding" bindingConfiguration="BasicHttpBinding_PricingService" 
      contract="<contract>" name="<name>" /> 

ultimatly ce que je suis en train de réaliser est

Seules les personnes de Windows authentifiées peut appeler le service -> Ensuite, le service utilise un compte serivce pour avoir toutes les interactions avec la base de données.

Notez que si je saute la première partie et ajouter un accès annon il fonctionne et a appelé la base de données bien

Nous vous remercions de l'aide

Répondre

0

Il semble que votre service emprunte l'identité de l'utilisateur lorsque l'utilisateur se connecte avec l'authentification de Windows. Lorsque vous utilisez l'authentification anonyme, il n'y a pas d'emprunt d'identité, donc pas de problème.

Lorsque vous utilisez l'authentification Windows et un compte Domian, ce compte n'est pas marqué car il peut emprunter l'identité peut-être c'est pourquoi vous obtenez le login, le service réseau a ce droit par défaut.

Essayez:

<authentication mode="Windows" impersonate="false"/> 
+0

Cela ne semble pas fonctionner. J'ai également essayé Mike

1

Si vous voulez faire l'appel db comme un compte particulier, vous pouvez usurper l'identité de ce compte pour la durée de l'appel:

using (WindowsImpersonationContext contexts = (new WindowsIdentity("account").Impersonate()){ db.MakeCall(); } 
0

J'ai eu le même problème . Je devais donner l'accès au dossier c: \ inetpub \ wwwroot \

J'ai donné l'autorisation de lecture du groupe 'DomainUsers'.

0

Si quelqu'un est toujours aux prises avec ce problème, tout ce que vous avez à faire est d'usurper l'identité de votre compte de service sur le Web.config:

<identity impersonate="true" userName="domain\svcname" password="password"/>