2012-07-09 12 views
5

NonceにEncodingTypeを必要とするWebサービスへのSOAP呼び出しを行うには、Ruby Webサービスクライアント(Savonを使用)を作成する必要があります。 RubyとSavonを使用したSOAPクライアント:Nonce要素にEncodingType属性を追加する方法

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

しかし、私のサボンクライアントで

、私はNonceの要素でその属性を追加する方法がわからない: だから、正しいSOAPメッセージには、このようなナンス要素を持つことになります。生成されたSOAPメッセージで

...... 
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 
...... 

とナンスのようである:ここに私のコードは

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

だから私の質問は、削除/変更せずに、Nonceの要素に属性EncodingTypeを追加する方法であり、 Nonce要素のSomeHashValue?

答えて

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'} } 
関連する問題