2011-09-14 18 views
6

Sto provando a chiamare un servizio Web Java da un'app Web MVC3 .NET utilizzando WSE 3.0.Come aggiungere un attributo EncodingType all'elemento Nonce di un nome utenteToken in WSE 3.0 (.NET)

Tuttavia, il servizio Web richiede un attributo "EncodingType" sull'elemento Nonce del Nome utenteToken. In seguito è una busta esempio SOAP che funziona correttamente con questo servizio Web Java:

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:v1="http://schema.mydomain.org/sms/v1_0"> 
    <soap:Header> 
    <wsse:Security soap:mustUnderstand="true" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <wsse:Username>myUsername</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password> 
     <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">XQkp6oYc3DRv41cxkSTW8w==</wsse:Nonce> 
     <wsu:Created>2011-09-13T20:50:08.355Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </soap:Header> 
    <soap:Body> 
     <v1:ping/> 
    </soap:Body> 
</soap:Envelope> 

seguente viene SOAP generato dal proxy che VS2010 prodotta (catturato in Fiddler):

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing" xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
    <env:Header xmlns:env="http://www.w3.org/2003/05/soap-envelope"> 
    <wsse:Security env:mustUnderstand="true"> 
     <wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-111f922b-72c1-4057-bce4-f6555552ce6a"> 
     <wsse:Username>myUsername</wsse:Username> 
     <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">myPassword</wsse:Password> 
     <wsse:Nonce>qYse3Lor9sAJ9pKPefgkKQ==</wsse:Nonce> 
     <wsu:Created>2011-09-13T20:50:38Z</wsu:Created> 
     </wsse:UsernameToken> 
    </wsse:Security> 
    </env:Header> 
    <soap:Body> 
     <v1:ping/> 
    </soap:Body> 
</soap:Envelope> 

Se questo attributo manca, questo servizio web restituisce, "È stato fornito un token di sicurezza non valido (si è verificato un errore durante l'elaborazione di un token utente)"

Come si aggiunge un attributo EncodingType?

risposta

2

ho trovato una soluzione accettabile ...

La bandiera EncodingType è secondo la WSSE nome utente e token di sicurezza Spec 1.1, che è la specifica richiesta dalla versione del framework Apache CXF che questo servizio Web Java è utilizzando. .NET non soddisfa questa specifica. Fortunatamente c'era una bandiera in CXF per disattivare il requisito. Lo abbiamo fatto e ora siamo in grado di comunicare.

+0

Ciao, sto avendo questo problema esatto. È bello sapere che c'è una bandiera, sarebbe più bello se tu menzionassi anche quale bandiera, ora devo ancora guardare. – toongeorges

3

Ho trovato che l'impostazione "isBSPCompliant" come proprietà jaxws sul mio endpoint su "false" risolve i problemi di EncodingType. Era questa la soluzione che hai trovato anche tu?

+0

Questo ha fatto il trucco per me: AtliB