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 では実行できません。動作しません! アーグ!
何か案は?