22

WS-UsernameToken 仕様を使用して SOAP リクエストを認証しようとしていますが、ターゲット デバイスが常にアクセスを拒否しています。私の非稼働リクエストは次のようになります。(ハッシュしようとしているパスワードは ですsystem。)

<?xml version="1.0" encoding="UTF-8"?>
<Envelope xmlns="http://www.w3.org/2003/05/soap-envelope">
 <Header>
  <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
    <UsernameToken>
      <Username>root</Username>
      <Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">EVpXS/7yc/vDo+ZyIg+cc0fWdMA=</Password>
      <Nonce>tKUH8ab3Rokm4t6IAlgcdg9yaEw=</Nonce>
      <Created xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">2010-08-10T10:52:42Z</Created>
    </UsernameToken>
  </Security>
 </Header>
  <Body>
    <SomeRequest xmlns="http://example.ns.com/foo/bar" />
  </Body>
</Envelope>

私が探しているのは、同様のリクエストの例ですが、実際に機能する認証トークンを使用しています。たとえば、これらのトークンを使用する gSOAP アプリケーションがあり、リクエストを生成してここに結果を投稿できる場合は、非常に感謝しています。

4

4 に答える 4

19

核となるのは、名前空間のプレフィックスを定義し、それらを使用してすべてのタグを強化することです.3つの名前空間を混在させており、デフォルトをハックしようとしてもうまくいきません. 標準 do cで使用されているプレフィックスをそのまま使用することもお勧めします。

最後に大事なことを言い忘れましたが、可能な限りフィールドのデフォルト タイプを使用する方がはるかに優れています。そのため、パスワードの場合はタイプをリストする必要があり、ノンスの場合はすでに Base64 になっています。

XML 経由で送信する前に、生成されたトークンが正しいことを確認してください。また、wsse:Password の内容が Base64 (SHA-1 (nonce + created + password) ) であり、wsu の日時であることを忘れないでください。作成されたものは簡単に台無しになります。したがって、プレフィックスと名前空間を修正し、XML なしで SHA-1 が正常に動作することを確認したら (リクエストを検証し、SHA-1 計算のサーバー側を実行していると想像してください)、Created を使用せずに、さらには Nonce を使用せずに、実際に実行することもできます。Oh と Nonce は異なるエンコーディングを持つことができるので、本当に別のエンコーディングを強制したい場合は、wsu 名前空間をさらに調べる必要があります。

<S11:Envelope xmlns:S11="..." xmlns:wsse="..." xmlns:wsu= "...">
  <S11:Header>
  ...
    <wsse:Security>
      <wsse:UsernameToken>
        <wsse:Username>NNK</wsse:Username>
        <wsse:Password Type="...#PasswordDigest">weYI3nXd8LjMNVksCKFV8t3rgHh3Rw==</wsse:Password>
        <wsse:Nonce>WScqanjCEAC4mQoBE07sAQ==</wsse:Nonce>
        <wsu:Created>2003-07-16T01:24:32</wsu:Created>
      </wsse:UsernameToken>
    </wsse:Security>
  ...
  </S11:Header>
...
</S11:Envelope>
于 2010-08-24T12:15:00.440 に答える
9

Metro 1.2のハッシュ パスワード サポートとトークン アサーション パラメータは、ダイジェスト パスワードを使用した UsernameToken がどのようなものかを非常にうまく説明しています。

ダイジェスト パスワードのサポート

WSS 1.1 Username Token Profileを使用すると、ダイジェスト パスワードをwsse:UsernameTokenSOAP メッセージで送信できます。この場合、さらに 2 つのオプション要素が に含まれています wsse:UsernameToken: wsse:Noncewsse:Created. nonce は、送信者が送信する各 UsernameToken に含めるために作成するランダムな値です。nonce を「鮮度」期間に結合するために、作成時間が追加されます。この場合のパスワード ダイジェストは、次のように計算されます。

Password_Digest = Base64 ( SHA-1 ( nonce + created + password ) )

これは、ダイジェスト パスワードを持つ UsernameToken がどのように見えるかです:

<wsse:UsernameToken wsu:Id="uuid_faf0159a-6b13-4139-a6da-cb7b4100c10c">
   <wsse:Username>Alice</wsse:Username>
   <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">6S3P2EWNP3lQf+9VC3emNoT57oQ=</wsse:Password>
   <wsse:Nonce EncodingType="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0#Base64Binary">YF6j8V/CAqi+1nRsGLRbuZhi</wsse:Nonce>
   <wsu:Created>2008-04-28T10:02:11Z</wsu:Created>
</wsse:UsernameToken>
于 2010-08-23T01:19:49.310 に答える
4

これを確認してください(パスワードはパスワードにする必要があります):

<wsse:UsernameToken xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" wsu:Id="SecurityToken-6138db82-5a4c-4bf7-915f-af7a10d9ae96">
  <wsse:Username>user</wsse:Username>
  <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">CBb7a2itQDgxVkqYnFtggUxtuqk=</wsse:Password>
  <wsse:Nonce>5ABcqPZWb6ImI2E6tob8MQ==</wsse:Nonce>
  <wsu:Created>2010-06-08T07:26:50Z</wsu:Created>
</wsse:UsernameToken>
于 2010-08-17T21:30:15.687 に答える