2012-07-09 32 views
5

Tôi cần tạo một máy khách dịch vụ web ruby ​​(với Savon) để thực hiện cuộc gọi xà phòng đến dịch vụ web yêu cầu EncodingType trong Nonce. Vì vậy, chính xác thông điệp xà phòng sẽ có phần tử nonce như thế này:Máy khách SOAP với Ruby và Savon: Cách thêm thuộc tính EncodingType trong phần tử Nonce

...... 
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SomeHashValue</wsse:Nonce> 
...... 

Nhưng trong ứng dụng Savon của tôi, tôi không biết làm thế nào để thêm thuộc tính rằng trong các yếu tố nonce. Mã của tôi ở đây:

...... 
client = Savon.client do 
    wsdl.endpoint = "http://webservicehost/TestWebService" 
    wsdl.namespace = "namespace" 
    wsse.credentials "username", "password" 
    wsse.digest = "true" 
end 
client.request :get_service do |soap| 
    soap.input = [ 
    "GetService", 
    { "xmlns" => "namespace" } 
    ] 
soap.body = { 
    "locale" => "en_US", 
    "serviceID" => '123' 
    } 
end 
...... 

và nonce trong thông điệp SOAP tạo ra giống như:

...... 
    <wsse:Nonce>SomeHashValue</wsse:Nonce> 
...... 

Vì vậy, câu hỏi của tôi là, làm thế nào để thêm EncodingType thuộc tính đến yếu tố nonce, mà không thay đổi/loại bỏ SomeHashValue trong phần tử Nonce?

Trả lời

3

Tôi đã thay đổi thành công phương thức def wsse_username_token của gems\akami-1.2.1\lib\akami\wsse.rb.

Tôi không biết cách tốt nhất nhưng điều này không hiệu quả, chỉ cần thêm vào :attributes!.

Trước:

:attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI } } 

Sau:

:attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI }, "wsse:Nonce" => { "EncodingType" => 'http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary'} } 
Các vấn đề liên quan