2011-09-14 19 views
6

Tôi đang cố gắng gọi Java Web Service từ một ứng dụng web MVC3 .NET bằng WSE 3.0.Làm cách nào để thêm thuộc tính EncodingType vào phần tử Nonce của UsernameToken trong WSE 3.0 (.NET)

Tuy nhiên, dịch vụ web yêu cầu thuộc tính "EncodingType" trên phần tử Nonce của UsernameToken. Sau đây là một phong bì SOAP mẫu mà làm việc một cách chính xác với dịch vụ web này 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> 

Sau đây là phong bì SOAP tạo ra từ các proxy VS2010 sản xuất (bị bắt trong 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> 

Nếu thuộc tính này bị thiếu, dịch vụ web này trả về, "Mã thông báo bảo mật không hợp lệ đã được cung cấp (Đã xảy ra lỗi khi xử lý Mã thông báo người dùng)"

Làm cách nào để thêm thuộc tính EncodingType?

Trả lời

2

Tôi tìm thấy một giải pháp có thể chấp nhận ...

Cờ EncodingType là theo WSSE Tên đăng nhập và Token an Spec 1.1, đó là spec yêu cầu của phiên bản của khuôn khổ Apache CXF rằng Dịch vụ Web Java này là sử dụng. .NET không đáp ứng thông số đó. May mắn thay đã có một lá cờ trong CXF để tắt yêu cầu. Chúng tôi đã làm điều đó và bây giờ có thể giao tiếp.

+0

Xin chào, tôi gặp sự cố chính xác này. Rất vui khi biết có một lá cờ, nó sẽ đẹp hơn nếu bạn cũng đề cập đến lá cờ nào, bây giờ tôi vẫn phải xem xét. – toongeorges

3

Tôi đã nhận thấy rằng cài đặt "isBSPCompliant" là thuộc tính jaxws trên điểm cuối của tôi thành "false" giải quyết các vấn đề về EncodingType. Đây có phải là giải pháp bạn tìm thấy không?

+0

Điều đó đã làm điều đó cho tôi: AtliB

Các vấn đề liên quan