2010-08-09 17 views
2

J'ai un service WCF que je veux utiliser pour accéder à une base de données SQL (via Linq2SQL pour l'instant), mais la sécurité sécurisée dans un environnement IIS actif ne semble pas utiliser les bonnes références - J'ai essayé de suivre les messages liés ici, mais je n'arrive pas à l'obtenir. Je serais vraiment reconnaissant si quelqu'un pouvait repérer mon erreur ...Authentification Windows dans WCF et IIS pour accéder à une base de données

dans la configuration Endpoint, je l'ai établi pour utiliser BasicHttpBinding, avec la configuration suivante

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

J'ai mis la paramètres de System.Web à:

<authentication mode="Windows" /> 
<identity impersonate="true" /> 

sur le serveur IIS, j'ai ajouté une nouvelle AppPool, définissez l'identité de ApplicationPoolIdentity et ManagedPipeLine à intégré. Sur l'application Web actuelle, définie sur mon nouvel AppPool, j'ai défini l'authentification Windows sur "Activé" et essayé ASP.Net Impersonation à la fois activé et désactivé

Lorsque j'essaie d'appeler le service WCF, il s'exécute, mais quand il fait un appel réel à un proc stocké via Linq2SQL (à une base de données sur un serveur distant utilisant Trusted Security), j'obtiens l'erreur suivante: Échec de la connexion pour l'utilisateur 'domaine \ machinename $' - le nom de la machine avec un signe du dollar à la fin

qui me ressemble beaucoup comme je n'ai pas réussi à déléguer l'identité correcte (je peux accéder à la base de données réelle via Management Studio.)

+0

même problème. s'il vous plaît faites le moi savoir si vous vous souvenez comment vous avez résolu. – morpheus

Répondre

0

L'accès à votre base de données ne devrait avoir aucun rapport avec vos paramètres de sécurité WCF. Je supprimerais les paramètres de sécurité de votre config de liaison et également le paramètre d'emprunt d'identité dans le system.web. Vous ne devriez pas en avoir besoin.

Vérifiez vos paramètres de chaîne de connexion dans votre configuration et assurez-vous que si vous utilisez la sécurité intégrée de Windows pour accéder à votre base de données que vous avez les autorisations correctes sur votre base de données. IIS tentera de se connecter à votre base de données en utilisant l'identité configurée dans l'apppool, vous devez donc vous assurer que ce compte a accès. Si vous avez un utilisateur nommé, assurez-vous que vos informations d'identification sont correctement définies. ConnectionStrings.com a plusieurs exemples de comment régler ceci correctement.

HTH.

Steve

+0

Salut Steve, J'entends ce que vous dites, mais mon exigence pour cette application est de se connecter à la base de données en utilisant l'identité de l'utilisateur qui fait la demande, pas l'identité partagée de l'appPool. Est-ce possible? Je l'ai toujours fait en utilisant l'identité appPool avant, mais ce projet a cette exigence (donc c'est peut-être plus une chose IIS que WCF) – TobyEvans

0

Oui, c'est possible. Dans ce cas, vous devez vous assurer que votre paramètre de sécurité est défini sur Windows (qui est la valeur par défaut) et assurez-vous que vos services sont amorcés pour l'usurpation d'identité. Vous pouvez le faire par programme ou par déclaration.

Vous devez indiquer à WCF d'autoriser l'emprunt d'identité pour le service/la méthode souhaité en définissant l'attribut ImpersonationOption approprié sur required ou allowed.

[OperationBehavior(Impersonation=ImpersonationOption.Allowed)] 

Parce que vous accédez à des ressources à travers le réseau, vous devez faire en haut que le niveau d'emprunt d'identité est défini à déléguer, se faire passer, à moins que les ressources dont vous avez accès sont locaux. Ceci est défini au niveau du comportement du point de terminaison client.

<clientCredentials> 
     <windows allowedImpersonationLevel="[Impersonation or Delegate]"/> 
</clientCredentials> 
+0

Salut Toby. Comment êtes-vous arrivé? – stephenl

+0

Salut Steve - juste en vacances, je vais vous dire comment ça s'est passé. Je pensais que le premier cadre me manquait ... – TobyEvans