2009-11-05 6 views
2

Nous avons un système où les utilisateurs accèdent à un serveur Web, le serveur Web appelle ensuite un service WCF.Appel WCF avec authentification Windows

Nous souhaitons que l'appel au service WCF soit effectué dans le contexte de sécurité de l'identité Windows du pool d'applications sur le serveur Web.

Quelle est la meilleure façon de faire cela? Cela peut-il être fait uniquement via la configuration dans le fichier web.config?

Merci

Shiraz

Répondre

5

Oui, vous devriez être en mesure de le faire, le tout dans config:

<system.serviceModel> 
    <bindings> 
    <netTcpBinding> 
     <binding name="WinAuth" mode="Transport"> 
      <transport clientCredentialType="Windows" /> 
     <bindings> 
    </netTcpBinding> 
    </bindings> 
</system.serviceModel> 

Bien sûr, en fonction de vos fixations, vous auriez à utiliser tag différent sous le noeud parent <bindings> - et bien sûr, toutes les liaisons ne prennent pas en charge tous les modes de sécurité ...

Dans votre point de terminaison, utilisez la liaison appropriée et en juste référence cette config:

<endpoint name="WCFService" address="......." 
      binding="netTcpBinding" 
      bindingConfiguration="WinAuth" 
      contract="......" /> 

Cela devrait le faire! Et bien sûr, si vous avez besoin de la sécurité des messages au lieu de la sécurité du transport, vous pouvez le faire aussi.

Dans votre méthode de service WCF, vous pouvez vérifier pour voir si oui ou non les informations d'identification de Windows ont été envoyés sur, et ce qu'ils sont, en vérifiant:

ServiceSecurityContext.Current.WindowsIdentity 

Ce sera NULL si vous ne avoir un appelant Windows, sinon il montrera qui vous a appelé.

Marc