SSLセキュリティとユーザー名/パスワードのクレデンシャルを必要とするサードパーティのSOAP1.1サービスに接続しようとしています。期待されるものの例は次のとおりです。
<soapenv:Header>
<wsse:Security>
<wsse:UsernameToken>
<wsse:Username>username</wsse:Username>
<wsse:Password>password</wsse:Password>
</wsse:UsernameToken>
</wsse:Security>
</soapenv:Header>
私のクライアント構成は次のとおりです。
<system.serviceModel>
<bindings>
<basicHttpBinding>
<binding name="thirdpartyservicebindingconfig">
<security mode="TransportWithMessageCredential">
<message clientCredentialType="UserName"
algorithmSuite="Default" />
</security>
</binding>
</basicHttpBinding>
</bindings>
<client>
<endpoint address="https://..."
binding="basicHttpBinding"
bindingConfiguration="thirdpartyservicebindingconfig"
contract="thirdpartyservicecontract"
name="thirdpartyserviceendpoint" />
</client>
</system.serviceModel>
サービスクライアントコードは次のとおりです。
var client = new thirdpartyservicecontractclient();
client.ClientCredentials.UserName.UserName = "username";
client.ClientCredentials.UserName.Password = "password";
var result = client.DoSomething();
次の障害例外メッセージが表示されます。
セキュリティプロセッサは、メッセージ内のセキュリティヘッダーを見つけることができませんでした。これは、メッセージがセキュリティで保護されていない障害であるか、通信するパーティ間にバインディングの不一致があることが原因である可能性があります。これは、サービスがセキュリティ用に構成されていて、クライアントがセキュリティを使用していない場合に発生する可能性があります。
編集:
セキュリティモードを「トランスポート」に再構成した場合:
<security mode="TransportWithMessageCredential">
サードパーティのサービスからエラーが発生します:
com.sun.xml.wss.XWSSecurityException:メッセージが構成済みポリシーに準拠していません[AuthenticationTokenPolicy(S)]:セキュリティヘッダーが見つかりません。ネストされた例外はcom.sun.xml.wss.XWSSecurityExceptionです:com.sun.xml.wss.XWSSecurityException:メッセージが構成されたポリシーに準拠していません[AuthenticationTokenPolicy(S)]:セキュリティヘッダーが見つかりません。
このサービスに接続するようにクライアントを構成するにはどうすればよいですか?
- SSL経由でプレーンテキストのパスワードを使用するWSセキュリティ