Comunicare in modo corretto WSSE Usernametoken per il servizio web SOAP

Sto tentando di utilizzare un servizio Web tramite il relativo wsdl. Questo servizio dipende dall’autenticazione conforms al profilo di sicurezza di base 1.0 di sicurezza dei servizi Web, incluso lo spazio dei nomi xmls corretto di http://docs.oasis-open.org/wss/2004/01/oasis-200401wss-wssecurity-secext-1.0. xsd deve essere incluso nella richiesta.

Esempio:

  Bob   1234   

I miei primi tentativi sono stati sulla falsariga di Add Service Reference rivolto a wsdl e dai proxy generati che li utilizzano come tali

 ServicePointManager.ServerCertificateValidationCallback = (object s, X509Certificate certificate, X509Chain chain, SslPolicyErrors sslPolicyErrors) => true; var basicHttpBinding = new BasicHttpBinding(BasicHttpSecurityMode.Transport); basicHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; var endpoint = new EndpointAddress("https://secure-ausomxana.crmondemand.com/..." using (var client = new ContactClient(basicHttpBinding, endpoint)) { var credential = client.ClientCredentials.UserName; credential.UserName = "bob"; credential.Password = "1234"; var input = ... var output = client.ContactQueryPage(input); } 

Tuttavia, tentando di interrogare i messaggi SOAP con Fiddler, vedo che nessun elemento UsernameToken è stato aggiunto.

Qual è il modo corretto per adempiere a questo contratto?

Modifica: seguendo la risposta di @John Saunders ho tentato di modificare il mio codice per utilizzare wsHttpBinding

 var wsHttpBinding = new WSHttpBinding(SecurityMode.Transport); wsHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; 

Usando questa associazione il messaggio SOAP diventa

   document/urn:crmondemand/ws/ecbs/contact/10/2004:ContactQueryPage urn:uuid:17807f44-1fcasfdsfd  http://www.w3.org/2005/08/addressing/anonymous  https://secure-ausomxana.crmondemand.com/Services/Integration      1-asdfd      

Questo aggiunge l’elemento Header, al contrario di wsse:UsernameToken elemento wsse:UsernameToken per riferimento il messaggio soap originale utilizzando BasicHttpBinding è

      1-asdfds      

Se cambio il legame da essere

 var wsHttpBinding = new WSHttpBinding(SecurityMode.TransportWithMessageCredential); wsHttpBinding.Security.Transport.ClientCredentialType = HttpClientCredentialType.Basic; wsHttpBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; 

Il messaggio SOAP che esco è

   http://schemas.xmlsoap.org/ws/2005/02/trust/RST/SCT urn:uuid:eeb75457-f29e-4c65-b4bf-b580da26e0c5  http://www.w3.org/2005/08/addressing/anonymous  https://secure-ausomxana.crmondemand.com/Services/Integration   2011-05-02T13:30:09.360Z 2011-05-02T13:35:09.360Z   Bob 1234      http://schemas.xmlsoap.org/ws/2005/02/sc/sct http://schemas.xmlsoap.org/ws/2005/02/trust/Issue  bI4xuyKwZ8OkQYBRnz2LDNV+zhIOnl0nwP24yI1QAwA=  256    

Questo sembra essere molto vicino, ma sembra che abbia effettivamente crittografato il corpo del messaggio di soap che è qualcosa che NON voglio accadere.

Se si specifica wsHttpBinding.Security.Message.ClientCredentialType = MessageCredentialType.UserName; con solo usando SecurityMode.Transport ritorna a dove dice anonimo.

Qual è l’ostacolo finale che non sono in grado di chiarire su questo?

Soluzione finale: Ho pensato che avrei postato questo in caso aiutasse qualcuno, non c’è molto diverso qui altro l’object UserToken è avvolto in un nodo di sicurezza che è quello che il mio fornitore di servizi ha richiesto e sembra essere il suo output dai miei esempi precedenti da cosa Potrei essere generato

                  USERNAME PASSWORD       

Vedi con C #, consumer SOAP WCF che utilizza l’autenticazione di testo in chiaro WSSE? per come configurarlo usando il codice e non la configurazione