テスト用の Windows Server 2012 ドメインがあります。このドメインのメンバーである 2 台のコンピューターがあります。
1 台のコンピューターは Oracle Corporation によって開発されており、仮想マシン上で Linux のバージョンを実行しています。このマシンは、おそらく IBM WebSphere によってホストされている SPNego Kerberos 認証 Web サービスをホストしています。
もう 1 台のコンピュータは、Microsoft 仮想マシンでホストされている Windows XP クライアントです。
Kerberos を使用してユーザーを認証するために、Active Directory 内に SPN を作成しました。
次に、ブラウザを使用して Web サービスをテストしました。WSDL アドレスにより、SOAP データが完全に復元されました。
クライアント プロキシ コードを WCF 4.0 クライアントに組み込み、認証をテストするために再度有効にできるように、Kerberos を無効にしました。
ただし、Client Proxy で提供されているメソッドを使用して Web サービスに接続しようとすると、あらゆる種類のセキュリティ関連のエラーが発生します。
リモート HTTP サーバーが相互認証の要件を満たしていませんでした。 リモート サーバーがエラーを返しました: (405) メソッドは許可されていません。
以下は、Web サービスへの接続に使用されるクライアント側の App.config ファイルです。
<configuration>
<system.serviceModel>
<client>
<endpoint address="http://oag:8080/pos/GetStoreConfigurationService"
binding="wsFederationHttpBinding"
bindingConfiguration="wsFederationHttpBinding_ESLGetStoreConfigurationBinding"
behaviorConfiguration="ServiceBehavior"
contract="ESLGetStoreConfigurationPortType"
name="wsFederationHttpBinding_ESLGetStoreConfigurationPort" >
<identity>
<servicePrincipalName value="http/oag:8080"/>
</identity>
</endpoint>
</client>
<bindings>
<customBinding>
<binding name="UsernameBinding">
<binaryMessageEncoding />
<security authenticationMode="Kerberos"
requireSecurityContextCancellation ="false"
requireSignatureConfirmation="false"
messageProtectionOrder ="EncryptBeforeSign"
requireDerivedKeys="false"
enableUnsecuredResponse="true"
allowInsecureTransport="true"
securityHeaderLayout="Lax" >
</security>
<httpTransport authenticationScheme="Negotiate"
transferMode="Buffered"
maxReceivedMessageSize="67819876"/>
</binding>
</customBinding>
<wsFederationHttpBinding>
<binding name="wsFederationHttpBinding_ESLGetStoreConfigurationBinding" >
<security mode="Message">
<message negotiateServiceCredential="true"
establishSecurityContext="false"
algorithmSuite="Basic128" >
<issuer address="http://192.168.100.25"
bindingConfiguration="UsernameBinding"
binding="customBinding">
<identity>
<dns value="WIN-7TN6ALB4TVK.oag-dev.sei"/>
</identity>
</issuer>
</message>
</security>
</binding>
</wsFederationHttpBinding>
</bindings>
<behaviors>
<endpointBehaviors>
<behavior name="ServiceBehavior">
<clientCredentials>
<windows allowedImpersonationLevel="Identification"/>
</clientCredentials>
</behavior>
</endpointBehaviors>
</behaviors>
</system.serviceModel>
<system.web>
<identity impersonate="false" userName="oag-server" password="Password!"/>
</system.web>
ネットワーク資格情報の提供もコードで行われました。しかし、残念ながら、役に立ちませんでした。
ありがとうございました。