Question

Je recherche des détails techniques sur l'emplacement de stockage du nom d'utilisateur et du mot de passe (identifiants) lors de l'échange de messages, à l'aide d'une liaison WCF comme ci-dessous.

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

Ensuite, à l'intérieur de l'application cliente, j'appelle ce service en transmettant un ensemble valide de comptes crédités, comme ça

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 les mettait dans l'en-tête SOAP, mais cela n'apparaît pas de cette manière dans le WSDL ... aucune aide?

Modifier :

La configuration de sécurité pour le client ci-dessous apparaît en production

<security mode="TransportWithMessageCredential">
    <transport clientCredentialType="None" />
    <message clientCredentialType="UserName" establishSecurityContext="false" />
</security>
Était-ce utile?

La solution

En définissant UserNameCredentials, vous exploitez en fait le profil de jeton de nom d'utilisateur. Cela entraîne 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 parlez de WSDL. Le jeton n'apparaît pas dans le WSDL, même si ce dernier doit contenir les annontations WS-Policy appropriées pour l'opération. Cela permettrait aux utilisateurs du WSDL de découvrir qu’ils ont réellement besoin d’envoyer UsernamePasswordToken à la demande.

Enfin, quelqu'un a créé RequestSecurityToken (RST), mais il ne devrait pas (nécessairement) y avoir de RST impliqué si vous utilisez simplement une authentification UsernameToken. Un RST ne doit intervenir que si vous effectuez un échange de jetons avec un serveur STS (Secure Token Server) à l'aide de WS-Trust.

Autres conseils

Voici à quoi pourrait ressembler un exemple de message SOAP:

<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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top