0

Secure Conversation で保護された WCF サービス (FooService) があります。FooService を呼び出すクライアントにトークンを提供する STS (StsService) もあります。トークンは 15 分間有効です。STS はカスタムビルドです (ジュネーブではありません)。クライアントには、クライアントの有効期間中に複数のサービスでトークンを再利用できるようにするためのカスタム WCF 拡張機能もあります。

FooService へのチャネルで「Open」が呼び出されると、クライアントは STS からトークンを要求します。STS は正常に機能し、トークンを発行して、有効な RSTR をクライアントに返します。クライアントは、デシリアライズされたトークンを (GenericXmlSecurityTokenオブジェクトとして) 受け取ります。

問題:

クライアントがインスタンスを受け取るとき、GenericXmlSecurityToken有効期限が正しく設定されていません。RSTR に<saml:Conditions>は、有効な有効期限を持つ SAML タグがありますが、何らかの理由で、WCF はタグを解析して の値を使用していないようですNotOnOrAfter

STS (サーバー側) のバインディングは次のとおりです。

    <binding name="stsBinding" receiveTimeout="infinite" 
sendTimeout="infinite">
      <security authenticationMode="SecureConversation" requireSecurityContextCancellation="true">
        <localClientSettings maxClockSkew="23:59:59" />
        <localServiceSettings maxClockSkew="23:59:59" 
inactivityTimeout="00:02:00" />
        <secureConversationBootstrap 
authenticationMode="UserNameForSslNegotiated">
          <localClientSettings maxClockSkew="23:59:59" />
          <localServiceSettings maxClockSkew="23:59:59" />
        </secureConversationBootstrap>
      </security>
      <binaryMessageEncoding />

クライアント側のバインディングは次のとおりです。

<binding name="stsBinding"
     closeTimeout="00:02:00"
     openTimeout="00:02:00"
     sendTimeout="00:02:00">
      <security authenticationMode="SecureConversation" requireSecurityContextCancellation="true">
        <localClientSettings maxClockSkew="23:59:59" />
        <localServiceSettings maxClockSkew="23:59:59" 
inactivityTimeout="00:02:00" />
        <secureConversationBootstrap 
authenticationMode="UserNameForSslNegotiated">
          <localClientSettings maxClockSkew="23:59:59" />
      <localServiceSettings maxClockSkew="23:59:59" />
    </secureConversationBootstrap>
  </security>
  <binaryMessageEncoding />
  <tcpTransport maxReceivedMessageSize="2097152"
                maxBufferSize="2097152" maxPendingConnections="10"
                listenBacklog="10" />
</binding>

正しい有効期限を表示するためにいくつかのことを試しました...しかし、何もうまくいかないようです。カスタムシリアライザーを実装しようとしました。の痕跡が見つかりませんでし<saml:Conditions>た。また、STS を直接呼び出してから、トークンを WCF に戻そうとしました。このソリューションは機能し、STS を直接呼び出して、応答を有効な SecurityToken に逆シリアル化しましたが、WCF に返されると、チャネルでの "Open" 呼び出しが 2 分後にタイムアウトします。エラーメッセージもトレースログにも何もありません...

クライアント側では、トークンに SAML アサーションがあります。: を見ると、次のように表示され((GenericXmlSecurityToken)token).TokenXml.InnerXmlます。

<saml:Conditions 
NotBefore="2009-09-01T19:36:54.669Z" 
NotOnOrAfter="2009-09-01T19:41:54.669Z" 
xmlns:saml="urn:oasis:names:tc:SAML:1.0:assertion">
</saml:Conditions>

.NET Framework ソースをステップ実行しようとしましたが、Windows 7 の VS 2008 SP1 では実行できません。動作しません! アーグ!

何か案は?

4

1 に答える 1

0

実際に何が送信されているかを確認するために、メッセージ ログの設定を試すことができます。

http://msdn.microsoft.com/en-us/library/ms730064.aspx

于 2009-09-01T16:12:42.823 に答える