Don*_*Don 5 ruby web-services soap-client savon
我需要创建一个ruby Web服务客户端(使用Savon)来对需要Nonce中的EncodingType的Web服务进行soap调用.所以正确的soap消息将具有如下的Nonce元素:
......
<wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">SomeHashValue</wsse:Nonce>
......
Run Code Online (Sandbox Code Playgroud)
但在我的Savon客户端中,我不知道如何在Nonce元素中添加该属性.我的代码在这里:
......
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
......
Run Code Online (Sandbox Code Playgroud)
生成的SOAP消息中的Nonce如下:
......
<wsse:Nonce>SomeHashValue</wsse:Nonce>
......
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,如何将属性EncodingType添加到Nonce元素,而不更改/删除Nonce元素中的SomeHashValue?
我已经成功修改gems\akami-1.2.1\lib\akami\wsse.rb文件的def wsse_username_token方法。
我不知道最好的方法,但这确实有效,只需添加到:attributes!.
前:
:attributes! => { "wsse:Password" => { "Type" => PASSWORD_DIGEST_URI } }
Run Code Online (Sandbox Code Playgroud)
后:
: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'} }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
642 次 |
| 最近记录: |