5

我需要创建一个 ruby​​ Web 服务客户端(使用 Savon)来对需要 Nonce 中的 EncodingType 的 Web 服务进行肥皂调用。所以正确的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>
......

但是在我的 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
......

生成的 SOAP 消息中的 Nonce 如下所示:

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

所以我的问题是,如何将属性 EncodingType 添加到 Nonce 元素,而不更改/删除 Nonce 元素中的 SomeHashValue?

4

1 回答 1

3

我已经成功修改了gems\akami-1.2.1\lib\akami\wsse.rb文件的def wsse_username_token方法。

我不知道最好的方法,但这确实有效,只需添加到:attributes!.

前:

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

后:

: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'} }
于 2014-02-24T16:07:22.903 回答