在具有wsse身份验证的Savon中,我的随机数令牌在后续请求中被重用

时间:2011-01-28 00:20:15

标签: ruby savon wsse

也许我只是没有为savon编写惯用代码,所以请随意让我理顺,但我试图在同一个客户端上发出多个请求,如

中所示。
client=Savon::Client.new {
  wsdl.document=wsdl_path
}

r1=client.request(:company_get_report_suites) do
  wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest
end

r2=client.request(:scheduling_get_reports_run_history) do
  wsse.credentials APP_CONFIG['omniture']['username'],APP_CONFIG['omniture']['shared_secret'],:digest
end

第二个请求最终重用nonce。 wsse nonce的意思是只使用它一次,所以我正在调用的服务抱怨我已经重用它并拒绝为请求提供服务。我的第一个想法是添加时间戳,但这没有帮助;事实上,源代码显示如果设置则使用随机数,并且仅在先前未设置时生成。

显然,如果必须,我可以创建一个新客户端,但这是一个相当重量级的操作,似乎不太可能是从同一个客户端创建多个请求的正常方式。

有合理的解决方法吗?

1 个答案:

答案 0 :(得分:0)

这让我觉得很脏,但是如果没有人能提出更好的选择,那就可以了:

class Savon::WSSE
  def reset_nonce
    @nonce=nil
    @nonce=nonce
  end
end

r1=client.request(:company_get_report_suites) do
  wsse.reset_nonce
end