2

次の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トレースを見ると、上記はネゴシエーションにまったく影響を与えていないようです。

キャッシュされたトークンが使用されていることをまだ確認しています。

4

1 に答える 1

4

多くの調査を行い、WCF トレースを調べ、Microsoft に連絡した後、この問題の根底にたどり着きました。

  1. メッセージ レベル セキュリティを使用する場合、WCF はセキュリティ コンテキスト トークンベースの認証 (SCT) を発行します。

  2. このタイプの認証は単にスティッキー セッションに依存しており、それを回避する方法はありません。

  3. それを無効にすることになっている設定がありますが、これは機能しません。これを設定した後、トレースで SCT が以前と同じように使用されていることがわかります (Microsoft の誰かに、ここで異常なことをしていないことを確認してもらいました)。この設定には別の依存関係がある可能性がありますが、シニア MS エンジニアは、この設定が機能しない理由も知りませんでした。

  4. これにより、いくつかのオプションが残ります

    を。Kerberos で「ワン ショット」呼び出しを使用する - 私のシナリオで Kerberos を有効にするとより大きな頭痛の種になるため、これについては調査しませんでした

    b. NTLMベースの認証でカスタムバインディングを使用します-これを試しましたが、SCTがまだ使用されていたため、うまくいきませんでした

    c. カスタム トークン発行サービスでフェデレーション セキュリティを使用します。これにより、トークンの発行方法をより細かく制御できますが、これを管理する必要があるという不必要な (私の場合) オーバーヘッドが発生します。

    d. TransportCredentialOnly セキュリティ モードで基本的な http バインディングを使用します。これは、Windows 資格情報を渡しながら SCT ネゴシエーションを停止するので便利です。

4.d は、構成以外に多くの変更を行う必要がなかったため、私にとって最も簡単でした。私は wshttpbinding 機能をあきらめていますが、この会話は信頼できるネットワーク内で行われているため、これまでのところ問題ありません。

于 2013-03-29T17:10:43.083 に答える