La WCF: Ajout de Nonce pour élément usernametoken
Je suis en train d'essayer de vous connecter à un service web, écrit en Java, mais il y a quelque chose que je ne peux pas comprendre.
En utilisant WCF et un customBinding, presque tout semble aller pour le mieux, sauf une partie du message de SAVON, car il manque le Nonce et a Créé une partie des nœuds.
Évidemment, je suis en manque de quelque chose, donc si vous pouviez me pointer dans la bonne direction, ce serait très apprécié.
Voici la liaison personnalisée:
<binding name="CustomHTTPBinding">
<security includeTimestamp="false" authenticationMode="UserNameOverTransport" defaultAlgorithmSuite="Basic256" requireDerivedKeys="True"
messageSecurityVersion="WSSecurity10WSTrustFebruary2005WSSecureConversationFebruary2005WSSecurityPolicy11BasicSecurityProfile10">
</security>
<textMessageEncoding maxReadPoolSize="211" maxWritePoolSize="2132" messageVersion="Soap11"
writeEncoding="utf-8"/>
<httpsTransport />
</binding>
Et voici la partie pertinente du message:
<o:Security s:mustUnderstand="1" xmlns:o="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
<o:UsernameToken u:Id="uuid-c306efd1-e84c-410e-a2ad-1046b368582e-1">
<o:Username>
<!-- Removed-->
</o:Username>
<o:Password>
<!-- Removed-->
</o:Password>
</o:UsernameToken>
</o:Security>
Et c'est comment il devrait ressembler à:
<wsse:Security xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" soapenv:mustUnderstand="1">
<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="UsernameToken-25763165">
<wsse:Username>..</wsse:Username>
<wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">..</wsse:Password>
<wsse:Nonce>6ApOnLn5Aq9KSH46pzzcZA==</wsse:Nonce>
<wsu:Created>2009-05-13T18:59:23.309Z</wsu:Created>
</wsse:UsernameToken>
</wsse:Security>
La question est donc: Comment ai-je pu introduire le Nonce et a Créé les éléments à l'intérieur de la partie sécurité?
- Avez-vous trouver une solution? Je serais intéressé de savoir.
- Dans la fin, nous avons utilisé WSE 2, afin de contourner les problèmes que nous avons d'avoir, au lieu de la WCF. Là, nous avons ajouté une stratégie personnalisée pour appliquer l'élément usernametoken à la demande de service et que c'était à elle que je pense.
Vous devez vous connecter pour publier un commentaire.
Pour créer le nonce, j'ai dû changer un peu les choses
Premier, a ajouté une liaison personnalisée dans ma config
Alors, prenez ce code trouvé ici: http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/4df3354f-0627-42d9-b5fb-6e880b60f8ee
et de le modifier pour créer le nonce (juste un hasard de hachage, codé en base 64)
mhsClient.ChannelFactory.Endpoint.Behaviors.Remove<ClientCredentials>(); mhsClient.ChannelFactory.Endpoint.Behaviors.Add(new CustomCredentials()); mhsClient.ClientCredentials.UserName.UserName = "username"; mhsClient.ClientCredentials.UserName.Password = "password";
et j'obtiens l'erreur suivante:"Text cannot be written outside the root element"
.J'ai eu le même problème. À la place de la coutume jeton sérialiseur j'ai utilisé un
MessageInspector
pour ajouter la bonneUsernameToken
dans leBeforeSendRequest
méthode. J'ai ensuite utilisé un comportement personnalisé pour appliquer le correctif.L'ensemble du processus est documenté (avec un projet de démonstration) de mon blog Soutenir le WS-I Basic Profile hachage de Mot de passe dans un WCF client proxy. Alternativement, vous pouvez simplement lire le PDF.
Si vous voulez suivre mes progrès grâce à la solution, vous le trouverez sur StackOverflow intitulé, "Erreur dans WCF client de consommer de l'Axe 2 service web avec WS-Security élément usernametoken schéma d'authentification par mot de passe digest":
Cet article fournit un exemple avec l'intégration complète de l'élément usernametoken Profil avec digéré le mot de passe de sécurité WCF pipeline.
Il est intéressant de souligner que Rick Strahl fait un post de blog (auquel il fait référence à cette question), où il explique tout très clairement, et propose des solutions pour à la fois juste Mot de passe et aussi mot de passe digest.
Je post parce que j'ai trouvé cet article à l'origine, ne pouvait pas vraiment le suivre, et trouvé de Rick post beaucoup plus tard. Cela peut sauver certaines personnes un certain temps.
WCF WSSecurity et WSE Nonce Authentification
J'ai également eu à mettre un UserNameHeader segment dans le message SOAP en-tête:
Cela a été accompli avec un message personnalisé en-tête:
D'autres balises, telles que les
Nonce
etCreated
, peuvent facilement être ajoutés.La classe est utilisée comme suit:
Remarque: MessageSigningCertificate est un X. 509 certificate, je l'ai lu à partir d'un fichier: