3

savonにはまだこの機能がないため、wsseセキュリティを備えたWebサービスに接続する必要があり、すべてのハッシュとトークンを手動で生成する必要があります。

私を狂わせるのは署名です。

    <SignedInfo>
      <CanonicalizationMethod Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
      <SignatureMethod Algorithm="http://www.w3.org/2000/09/xmldsig#rsa-sha1"/>
      <Reference URI="#_0">
        <Transforms>
          <Transform Algorithm="http://www.w3.org/2001/10/xml-exc-c14n#"/>
        </Transforms>
        <DigestMethod Algorithm="http://www.w3.org/2000/09/xmldsig#sha1"/>
        <DigestValue>......</DigestValue>
      </Reference>
    </SignedInfo>

これは参照される部分です:

  <u:Timestamp u:Id="_0">
    <u:Created>2012-01-04T08:21:22.143Z</u:Created>
    <u:Expires>2012-01-04T08:26:22.143Z</u:Expires>
  </u:Timestamp>

私が理解していることから、参照される要素(タイムスタンプ)を正規化し、SHA-1でハッシュしてから、base64にエンコードする必要があります。

問題は、タイムスタンプのどの部分を正規化する必要があるかということです。要素全体を使用してから、とを個別に使用してみましたが、正しいDigestValueを取得できませんでした。

4

2 に答える 2

2

整理しました。内部にインデントを入れてタイムスタンプブロックを正規化していたため、ダイジェストを台無しにするスペースと「\n」がいくつか残っていました。xmlリクエスト全体をワンライナーに変換した後、すべてが正しく機能しました。このセキュリティと1週間以上戦い、最終的にいくつかの結果を確認した後、世界は美しい場所を縫い合わせます:)

于 2012-01-11T17:45:57.223 に答える
1

署名されたタイムスタンプを使用するプルリクエストをAkamiに追加しました(SavonがWSSE署名に使用するgem)。ここで表示できます:https ://github.com/savonrb/akami/pull/25実装されるまで、すでに実装されているhttps://github.com/webit-de/akamiを 使用できます。

于 2015-11-16T11:13:25.247 に答える