2009-09-01 59 views
0

我有一個由Secure Conversation保護的WCF服務(FooService)。還有一個STS(StsService),它爲向客戶端調用FooService提供令牌。令牌有15分鐘的好處。 STS是定製的(沒有日內瓦)。客戶端還有一些自定義的WCF擴展,允許在客戶端生命週期內跨多個服務重用令牌。WCF STS令牌過期問題

當調用通道上的「打開」到FooService時,客戶端向STS請求令牌。 STS工作正常,頒發令牌並將有效的RSTR提供給客戶端。客戶端收到反序列化的標記(作爲GenericXmlSecurityToken對象)。

問題:

當客戶端接收GenericXmlSecurityToken例如,到期日期設置不正確。在RSTR中,有一個SAML標籤<saml:Conditions>,其有效截止日期爲BUT,由於某些原因,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時,信道上的「打開」呼叫在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源步進,但不能做到這一點與VS在Windows 7 2008 SP1不起作用!精氨酸!

任何想法?

回答

0

您可以嘗試配置消息日誌記錄,以檢查實際發送的內容。

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

+0

是的,我配置了消息記錄。該消息包含具有有效NotValidOnOrAfter屬性的有效元素。它只是在客戶端被忽略。 – Doanair 2009-09-01 17:10:26

+0

這可能是與日期時間格式有關嗎? – 2009-09-01 19:24:42

+0

這就是我想,但我嘗試手動分析它並將其解析爲日期時間就好了...... 下面是客戶端從服務器接收: ((GenericXmlSecurityToken)令牌).TokenXml.InnerXml = = Doanair 2009-09-01 19:40:05