WSSE認証を使用したSavonでは、私のNonCeトークンはその後のリクエストで再利用されます

StackOverflow https://stackoverflow.com/questions/4823478

  •  26-10-2019
  •  | 
  •  

質問

たぶん私は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

2番目の要求は、NonCeを再利用することになります。 WSSE Nonceのポイントは1回だけ使用することです。そのため、私が呼んでいるサービスは、私がそれを再利用し、リクエストのサービスを拒否していると不満を述べています。私の最初の考えはタイムスタンプを追加することでしたが、それは助けにはなりませんでした。実際、ソースコードは、設定されていない場合にNonCEが使用され、以前に設定されていない場合にのみ生成されることを示しています。

明らかに、必要に応じて新しいクライアントを作成できますが、それはかなり重い操作であり、同じクライアントから複数のリクエストを作成する通常の方法ではないようです。

賢明な回避策はありますか?

役に立ちましたか?

解決

これは私に汚いと感じさせますが、誰もより良い代替案を提案できないなら、これはトリックを行います:

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

r1=client.request(:company_get_report_suites) do
  wsse.reset_nonce
end
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top