2009-10-28 25 views
3

Je suis à la recherche de détails techniques sur l'emplacement actuel du nom d'utilisateur et du mot de passe (informations d'identification) lors de l'échange de messages à l'aide d'une liaison WCF comme ci-dessous.Détails de l'implémentation des informations de message WCF

<bindings> 
    <wsHttpBinding> 
     <binding name="wsHttp"> 
      <security mode="TransportWithMessageCredential"> 
       <transport/> 
       <message clientCredentialType="UserName" 
         negotiateServiceCredential="false" 
         establishSecurityContext="true" /> 
      </security> 
     </binding> 
    </wsHttpBinding> 
</bindings> 

Ensuite, dans l'application client j'appeler ce service qui passe un ensemble valide de creds comme si

using (SupplierServiceClient client = new SupplierServiceClient()) { 
      client.ClientCredentials.UserName.UserName = "admin"; 
      client.ClientCredentials.UserName.Password = "password"; 

      SupplierList = client.GetSupplierCollection(); 
} 

Au début, je pensais que WCF prenait ces données et de le mettre dans l'en-tête SOAP mais ne semble pas de cette façon du WSDL ... aucune aide?

Modifier:

Le dessous est ce que la configuration de la sécurité pour le client ressemble à la production

<security mode="TransportWithMessageCredential"> 
    <transport clientCredentialType="None" /> 
    <message clientCredentialType="UserName" establishSecurityContext="false" /> 
</security> 

Répondre

3

En définissant UserNameCredentials, vous utilisez en fait le profil de jeton Username. Cela provoque l'ajout du jeton au message en tant qu'en-tête SOAP. L'en-tête SOAP ressemblera à quelque chose comme ceci:

<env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope" 
     xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
    <env:Header> 
     <wsse:UsernameToken> 
      <wsse:Username>jdoe</wsse:Username> 
      <wsse:Password>passw0rd</wsse:Password> 
      <wsse:Nonce><!-- optional nonce here --></wsse:Nonce> 
     </wsse:UsernameToken> 
    </env:Header> 
    <env:Body> 
     <!-- body here --> 
    </env:Body> 
</env:Envelope> 

Maintenant, je ne sais pas exactement pourquoi vous mentionnez WSDL. Le jeton n'apparaîtra pas dans le WSDL, bien que le WSDL contienne les annotations WS-Policy correctes sur l'opération. Cela permettrait aux consommateurs du WSDL de découvrir qu'ils ont réellement besoin d'envoyer le nom d'utilisateur UsernamePasswordToken à la demande. Enfin, quelqu'un a lancé RequestSecurityToken (RST), mais il ne devrait pas y avoir de RST impliqué si vous n'utilisez qu'une simple authentification UsernameToken. Le seul moment où un RST doit être impliqué est si vous faites un échange de jeton avec un serveur de jeton sécurisé (STS) en utilisant WS-Trust.

0

Voici comment un exemple de message SOAP pourrait ressembler à:

<s:Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" xmlns:a="http://www.w3.org/2005/08/addressing"> 
    <s:Header> 
    <a:Action s:mustUnderstand="1">http://schemas.xmlsoap.org/ws/2005/02/trust/RST/Issue</a:Action> 
    <a:MessageID>urn:uuid:01d3a7d2-dc5a-42cf-acf0-3dd6bd50230e</a:MessageID> 
    <a:ReplyTo> 
     <a:Address>http://www.w3.org/2005/08/addressing/anonymous</a:Address> 
    </a:ReplyTo> 
    <a:To s:mustUnderstand="1">http://localhost:9999/Service1.svc</a:To> 
    </s:Header> 
    <s:Body> 
    <t:RequestSecurityToken Context="uuid-7c240c06-c14b-42af-82dd-10f44f423928-1" xmlns:t="http://schemas.xmlsoap.org/ws/2005/02/trust"> 
     <t:TokenType>http://schemas.xmlsoap.org/ws/2005/02/sc/sct</t:TokenType> 
     <t:RequestType>http://schemas.xmlsoap.org/ws/2005/02/trust/Issue</t:RequestType> 
     <t:KeySize>256</t:KeySize> 
     <t:BinaryExchange ValueType="http://schemas.xmlsoap.org/ws/2005/02/trust/spnego" EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YGsGBisGAQUFAqBhMF+gJDAiBgorBgEEAYI3AgIKBgkqhkiC9xIBAgIGCSqGSIb3EgECAqI3BDVOVExNU1NQAAEAAAC3shjiBgAGAC8AAAAHAAcAKAAAAAUBKAoAAAAPU0cyMjA1Nk1BVE1VVA==</t:BinaryExchange> 
    </t:RequestSecurityToken> 
    </s:Body> 
</s:Envelope> 
+0

excellent - donc dans le corps sous "demande de jeton de sécurité" verrions-nous aussi le nom d'utilisateur + mot de passe ou? –

+0

Je ne suis pas sûr de ce que RequestSecurityToken a à faire avec cette question sur UsernameTokens ...? –

+0

Ceci est seulement la première partie (demande) de l'établissement de liaison WS-Trust utilisée pour établir un contexte de sécurité. Vous pouvez lire plus de détails à ce sujet ici: http://specs.xmlsoap.org/ws/2005/02/trust/ws-trust.pdf –