次のwsHttpBindingでWCFメッセージレベルのセキュリティを使用しています
<security mode="Message">
<message clientCredentialType="Windows" establishSecurityContext="false" />
</security>
サービスを呼び出すたびに個別の操作が行われ、セッション状態を維持する必要はありません。
WCFはセキュリティトークンを再利用し続けるため、ロードバランサーで問題が発生しています。そのため、最初の呼び出しがNodeAに送信されると、再利用されるセキュリティトークンが作成されます。そのトークンがNodeBに渡された場合、MessageSecurityExceptionが発生します
これに対するマイクロソフトの答えは、スティッキーセッションを使用することであるように思われます。これは、私たちが調査したものですが、セットアップでは意味がありません。
呼び出しごとにWCFに新しいセキュリティトークンを作成させる方法はありますか?(Windowsクレデンシャルタイプでメッセージレベルのセキュリティを使用している間?
アップデート
クライアント/サーバーにトレースを設定すると、トークンが24時間キャッシュされていることがわかります。
<ServiceToken>
<SessionTokenType>System.ServiceModel.Security.Tokens.BufferedGenericXmlSecurityToken</SessionTokenType>
<ValidFrom>2013-03-23T21:21:32.569Z</ValidFrom>
<ValidTo>2013-03-24T07:21:32.569Z</ValidTo>
<InternalTokenReference>LocalIdKeyIdentifierClause(LocalId = 'uuid-291b4a38-af17-4832-bc7a-6fb65dcc3c3c-18', Owner = 'System.ServiceModel.Security.Tokens.SecurityContextSecurityToken')</InternalTokenReference>
IssuanceTokenProviderは、キャッシュされたサービストークンを使用しました。
私は以下を使用してトークンキャッシングを無効にしようとしました:
IssuedTokenClientCredential itcc = service.ClientCredentials.IssuedToken;
itcc.CacheIssuedTokens = false;
itcc.LocalIssuerAddress = new EndpointAddress("http://localhost:####/myservice");
itcc.LocalIssuerBinding = new WSHttpBinding("my_wsHttp_bindingConfig");
itcc.MaxIssuedTokenCachingTime = new TimeSpan(0,0,0);
しかし、wcfトレースを見ると、上記はネゴシエーションにまったく影響を与えていないようです。
キャッシュされたトークンが使用されていることをまだ確認しています。