J'ai suivi de nombreux articles MSDN et les conseils de CodePlex mais ne peuvent pas obtenir WCF de travailler avec l'authentification et la délégation de Kerberos et apprécieraient un peu d'aide.
Configuration p> i avoir le service WCF dans un site Web IIS sur une machine distante p> J'utilise le site de débogage de Brian Booth sur 8080 et le site transmet toutes les exigences de la délégation de Kerberos. Le site de débogage IIS a une authentification anonyme et une authentification intégrée de Windows sur. P> J'ai reflété ces paramètres sur le site hébergeant le service WCF. P>
<!-- ... -->
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Windows"
proxyCredentialType="Windows"
realm="" />
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
<!-- ... -->
4 Réponses :
Quelque chose que je remarque: le client et la configuration du serveur ne semblent pas être d'accord sur le mode de sécurité. P>
Dans la section d'origine, vous avez Après votre édition, il semble que le côté client soit inchangé, mais le serveur (web.config) contient maintenant La question est vraiment: pouvez-vous garantir qu'il n'y a jamais qu'une seule jambe réseau entre le client et le serveur appelé? C'est à dire. Est-ce derrière un pare-feu d'entreprise? Dans ce cas, je recommanderais la liaison NETCP avec Si ce n'est pas le cas, alors vous êtes d'accord avec WshttpBinding (qui prend en charge plus de fonctionnalités de sécurité et de fiabilité, mais est plus lente et «plus lourde») ou BasichttpLinding. Dans ce cas, vous devriez utiliser J'essaierais de laisser sortir les parties d'impersonnation pour le début et obtenez simplement la communication de base et l'authentification mutuelle entre le service et la clientèle d'abord et courir en premier - une fois en place, vous pouvez commencer à ajouter les bits d'impersonation, et Vous pouvez toujours revenir sur une configuration connue qui fonctionne. P>
David Sackstein a un Super série de poteaux de blog Expliquer les cinq scénarios de sécurité que l'industrie Guru Juval Lowy a identifié (dans son Programmation WCF Book - La Bible WCF) Comme le plus courant et le plus utile - afin de limiter le nombre de combinaisons possibles de paramètres que vous pourriez vouloir peaufiner. L'un d'eux est un scénario "internet" qui s'appliquerait probablement ici si votre service est tourné vers l'extérieur. P>
marc p>
Merci pour la réponse. Je n'ai pas inclus le code client mis à jour, j'ai pensé que la question a suffisamment d'encombrement tel qu'il est. Je vais passer sur les informations que vous avez fournies, merci.
"Authentifier le service avec un certificat", c'est quelque chose que quelqu'un ici essaie d'éviter. Nous espérions utiliser des billets de Kerberos droit pour authentifier les utilisateurs et déléguer tout lieu vers des machines à dos tels que SP et SQL.
Pour moi, la configuration actuelle fonctionne:
sur le serveur: p> Définissez l'attribut suivant sur toutes les méthodes de la WCF: p> <system.serviceModel>
<bindings>
<wsHttpBinding>
<binding name="WSHttpBinding_IZeitManager" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm=""/>
<message clientCredentialType="Windows" negotiateServiceCredential="true" algorithmSuite="Default" establishSecurityContext="true"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="Delegation">
<clientCredentials>
<windows allowedImpersonationLevel="Delegation" />
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
<client>
<endpoint address="http://server.mydomain.net/ePZEsvc/ZeitManager.svc" binding="wsHttpBinding" bindingConfiguration="WSHttpBinding_IZeitManager"
contract="External.Epze.IZeitManager" name="WSHttpBinding_IZeitManager" behaviorConfiguration="Delegation">
<identity>
<servicePrincipalName value="HOST/localhost"/>
</identity>
</endpoint>
</client>
</system.serviceModel>
Qu'en est-il de vos paramètres IIS pour les méthodes d'authentification? L'accès anonyme est-il désactivé?
J'ai une authentification Windows et un accès anonyme activé. Mais vous aurez besoin d'anonyme uniquement lors de l'ajout du point final MEX (iMetaDataExchange) pour votre service.
Vous devez essayer votre configuration initiale et vous assurer de régler l'IIS pour être une authentification anonyme et Windows en même temps. La raison est que lorsque vous utilisez WSHTTPTPTPLinding Security Security est la sécurité des messages et il n'y a pas de sécurité de transport, à moins que vous ne le souhaitiez faire https. Donc, CLR stipule qu'il nécessite une authentification anonyme allumée sur l'IIS. P>
Vous devez spécifier un comportementConfiguration dans votre configuration client. SvCutil ne génère pas automatiquement. Cela résolue mon problème et j'utilise maintenant avec succès Kerberos. C'était une mission cependant!
Note, j'ai posté et supprimé quelque chose de similaire hier, cet article comprend des révisions basées sur plus de recherches et devrait être plus propre à lire.
J'ai ajouté la configuration de l'application révisée basée sur les commentaires de Marc_s.