我有一個由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不起作用!精氨酸!
任何想法?
是的,我配置了消息記錄。該消息包含具有有效NotValidOnOrAfter屬性的有效元素。它只是在客戶端被忽略。 –
Doanair
2009-09-01 17:10:26
這可能是與日期時間格式有關嗎? – 2009-09-01 19:24:42
這就是我想,但我嘗試手動分析它並將其解析爲日期時間就好了...... 下面是客戶端從服務器接收: ((GenericXmlSecurityToken)令牌).TokenXml.InnerXml = = saml:條件> –
Doanair
2009-09-01 19:40:05