Vous avez une simple application de démonstration de WCF qui possède deux projets de console - hôte et client. Les deux fonctionnent sur ma machine (Win 7 Box). J'utilise le netcpbinding, qui utilise l'authentification Windows.
Le problème est que l'authentification diminue vers NTLM de Kerberos et je ne peux pas comprendre pourquoi. strong> p> si j'utilise p> <client>
<endpoint address="net.tcp://dev7.HurrDurr.com:12345/MyService"
binding="netTcpBinding"
bindingConfiguration="MyBindingConfigurationLol"
behaviorConfiguration="HurrDurrServiceEndpoint"
contract="ShaolinCore.ICommunicationService">
<!-- start changes here -->
<identity>
<userPrincipalName value="myusername@mydomain"/>
</identity>
<!-- end changes here -->
</endpoint>
</client>
4 Réponses :
Comment le serveur est-il configuré? Avez-vous le Vous définissez le mode d'authentification via la balise d'authentification dans le fichier de configuration: p>
Je pense que ceux-ci s'appliquent uniquement aux liaisons HTTP. Je spécifie que mon clientCredentialType est toutefois Windows.
Encore une fois, cela fonctionne si le client autorise NTLM, il échoue autrement (ce qui signifie que je pense que Kerberos n'est pas disponible).
Afaik ils s'appliquent uniquement à http.
Je ne vois aucune authentificationMode de rien à voir avec TCP. Je ne vois cependant pas l'identité non plus, et cela a finalement été la solution. Où, exactement dans une liaison TCP, définissez-vous le mode d'authentification (en XML, pas dans le code KTHX)?
Ceci est une application de console; Je ne pense pas comment je me connecte à un site Web a beaucoup à voir avec ce que je ressens ...
Peut-être cette page sur msdn - Débogage des erreurs d'authentification Windows - Vous aide à déterminer ce qui se passe - semble être assez délicat quant à l'utilisation de NTLM vs. Kerberos. P>
K ... utilisateur de domaine sur les deux extrémités, chèque. URL entièrement qualifiée, mise à jour, aucune différence. Ajout de l'identité / UPN ... Aucune différence. Configuration de l'identité SPN sur le client ... Bingo!
@WILL: Cool, j'étais sur le point de vous suggérer de vérifier les SPNS sur le serveur et le client.
FYI via MSDN: netcpbinding: la liaison par défaut utilise la sécurité du transport avec une authentification négociée. Cette négociation tente d'utiliser Kerberos, mais si cela ne fonctionne pas, il tombera en retour et utiliser le protocole NTLM plus ancien fort>. Kerberos est un excellent choix si vous êtes dans un environnement de domaine; Afin de l'utiliser, vous aurez besoin de votre service et de vos clients pour exécuter des comptes de domaine. Vous voudrez également configurer un nom de principe de service (SPN) pour votre service. P>
Donc, en théorie après avoir lu vos commentaires que je n'ai pas lu initialement, le comportement semble être par conception.
Lorsque j'ai travaillé sur les équipes de développement IIS4, 5 et 6, nous avons beaucoup couru dans cette situation! Pour que le curbe fonctionne, vous avez besoin que les conditions suivantes soient vraies: p>
1) Les deux parties prennent en charge la bordure (toutes les versions prises en charge de Windows Support Curb Aujourd'hui) P>
2) machines Auth à Active Directory p>
3) Noms principaux de service (SPNS) enregistrés pour le point final du serveur. Dans le "bon vieux temps", vous deviez faire cela à la main avec SetSpn.exe. Un SPN n'est qu'un point final que le curb se connectera à; Cela nécessite ces données pour soutenir l'AuthN mutuel. La plupart des applications appelleront l'API d'approcha à ce travail pour vous (DSWRITEACCONTSPN) P>
Si l'une des étapes ci-dessus n'est pas vraie, Windows généralement em> par défaut sur NTLM, WHCIH ne vous donne que l'authentification client. P>
espère que cela aide!
- Michael p>
J'ai lu un livre ou deux à propos de Windows Security, et c'est toujours déroutant parfois. Je ne comprends pas comment WCF gère également l'authentification mutuelle, donc cela le rend doublement difficile. Pourquoi dois-je fournir le serveur UPN / SPN / DNS pour activer le trottoir sur le client? Si je ne fais pas pleinement confiance au serveur, pourquoi NTLM est-il meilleur que curb? Ou le client doit-il fournir l'identité de service à une tierce partie? Pourquoi le service ne peut-il pas lui fournir directement? Pourquoi ai-je mal à la tête?
La bordure doit authentifier le client et le serveur et par là, je veux dire les ordinateurs i>. Lorsque votre code client (WCF) apporte une demande de connexion à un service, il doit savoir exactement i> ce que cela se connecte à ce que vous connectez, donc un administrateur doit ajouter le SPN pour l'application Server à l'adresse addelon "Re disant à curb" Je dois me connecter à ce SPN ". Dans de nombreux cas, le côté serveur de l'équation sera i> réégister un SPN mais seulement si cela a la capacité de le faire. NTLM n'est pas meilleur que curb, NTLM authentifie un client uniquement, le serveur sait donc qui vous êtes, mais vous n'avez aucune idée que vous vous connectez.
De plus: Kerberos ne peut être utilisé que lorsque vous invoquez le service via un nom DNS. Invoquer le service via une adresse IP entraînera une utilisation NTLM
Cela semble être une question pour serveurfault.com.
Solution répertorie: Kerberos est plus sécurisée pour exactement cette raison - le serveur est une source de confiance et connue avec une identité garantie à la fois en termes d'adresse et b> processus fonctionnant à cette adresse. Un compte de service exécuté en tant qu'utilisateur différent ne serait pas en mesure de traiter votre demande.
@hogan je penserais que Curb / NTLM est plus sur l'authentification que l'autorisation. Permettez-moi d'authentifier avec n'importe quel serveur à l'aide de curb; Une fois que je sais qui est le service, je peux décider si je veux y faire face. Si je vous authentifiez avec CURB, j'ai l'identité du service fourni par une tierce partie fiduciaire (AD). Si le service est à usage spoofé, je peux dire par cette identité et jeter une exception s'il n'est pas prévu. Dans WCF, il apparaît qu'un serveur d'éclaboussures échoue de trottoir puis passe avec NTLM. Cela ne semble pas sécurisé pour moi. Authentifier avec n'importe qui, lancez si ce n'est pas ce que je m'attendais.
Bien sûr, ça sonne bien, mais ce n'est pas la manière dont il est mis en œuvre.