我有一个由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