Je suis chargé de créer un service WCF qui sera consommé par un client externe. Le client utilise Security WSSE, en particulier, ils passent un jeton de nom d'utilisateur via une en-tête de savon.
Le service WCF est hébergé sur un serveur IIS avec SSL activé. P>
À ce stade, j'ai un prototype semi-travail. Le problème que je traite maintenant est que l'en-tête SOAP a l'attribut MUSTUNDERSTAND défini à 1, ce qui entraîne l'échec du processus. p>
Je voudrais des conseils (ou mieux encore, un exemple de code sourires em>) sur la manière de gérer le jeton de nom d'utilisateur de manière à renvoyer la réponse appropriée lorsque le Mustonderstand L'attribut est vrai. p> Voici un échantillon de la demande de savon qui échoue: p> si SOPENNV: MUSTOMDERSTAND = "1" est modifié en SOAPENV: MUSTOMDODERSTAND = "0", puis le processus fonctionne. P> ps: voici une demande d'échantillon révisée Le client envoyé: p> Je reçois ce qui suit Réponse aux demandes ci-dessus: p> Voici la liaison: p>
3 Réponses :
+1 @johnsaunders car il aboie probablement le bon arbre ici. P>
est votre client .NET / WCF? Sinon, il peut ne pas mettre en œuvre WS-Security, ou du moins pas à la manière dont WCF le souhaite. P>
Si le client est .NET, il ne s'agit que d'une liaison incompatible du côté client. P>
Le drapeau Mustonderstand dit que l'en-tête WS-Security doit être reconnu et traité. Un client de sécurité non WS-Security, que ce soit parce qu'il ne parle pas WS-Security ou n'est pas configuré pour, ignorera l'en-tête, essayez d'utiliser le message quand même et le serveur sera le punt. P>
Votre autre option consiste à tourner de la répudiation sur le serveur. Il arrête d'envoyer des en-têtes WS-Security. Bien sûr, alors vous n'obtenez pas de répudiation. P>
Je suis assez certain que c'est un client Java, mais je ne sais pas quelle saveur.
Votre reliure est BasichttpLinding code>. Vous devez utiliser wshttpbinding code>. P>
J'ai résolu ce problème en n'utilisant pas l'en-tête Généré WS-Securither (lorsque vous ajoutez la référence de service) dans la configuration de la WCF, mais plutôt en commentant cette sortie et que vous laissez .NET générer l'en-tête lui-même en utilisant des informations d'identification du client et en spécifiant un Mode de sécurité de "TransportwithMessAreDential":
<client>
<endpoint ...>
<!--<headers>
<wsse:Security...>
</wsse:Security>
</headers>-->
</endpoint>
</client>
Êtes-vous sûr qu'il utilise WSE (Extensions de service Web)?
Non, je ne suis pas positif. J'ai ajouté à l'échantillon ci-dessus une demande d'échantillon révisée du client envoyé.
Exactement quel est le "échec". Exactement ce qui vous a fait croire que l'échec a été causé par
MUSTOMDERSTAND code>?Ajout de la réponse d'erreur à ce qui précède (pas assez de caractères pour tenir dans un commentaire).
Pouvez-vous partager avec nous la liaison que vous utilisez sur votre service? Utilise-t-il
wshttpbinding code>? En tant qu'expérience, pouvez-vous créer un programme client .NET pour consommer votre service? Est-ce que votre client .NET n'envoie égalementMUSTUNDERSTAND code>?Ajout de la configuration de liaison ci-dessus. Le client .NET n'envoie pas Mustlarderstand.