我正在使用新的4.5WIF材料来验证网站的用户,并确保我的MVC网站和WCF服务之间的通信安全。
我有网站配置,以保存引导上下文,以便我可以重用相同的安全令牌的所有请求到服务层。
在正常情况下,所有的工作都很好,每个网站的请求都经过认证,SecurityToken通过上下文提供,以保护WCF调用的安全。
但是,如果网站应用域被重置(例如,在开发过程中构建应用程序),对网站的任何请求仍然将被认证,但是SecurityToken在上下文中不再可用,无法传递给WCF调用。
调试BootstrapContext它有4个有用的属性:
SecurityToken
SecutiryTokenHandler
Token
TokenBytes前应用程序域重置SecurityToken和SecurityTokenHandler有值,而post重置令牌有一个值.
重新设置之后,注意令牌的值,它看起来像是原始的SAML,因此我可以从它中重新补充一个完整的SecutiryToken,但是这似乎是奇怪的行为,我找不到任何文档。
我能做些什么来确保SecurityToken总是可用的,以节省我在令牌XML上的麻烦呢?
更新
使用dotPeek查看框架源代码中正在发生的事情,我可以看到导致这种行为的执行路径,但我无法确定为什么需要这样做,也无法确定为什么需要这样做。
最后,我放弃了尝试解决这个问题,现在使用下面的代码来确保我有一个令牌
if (context.SecurityToken != null)
{
token = context.SecurityToken;
}
else if (context.Token.IsNotEmpty())
{
var handlers = FederatedAuthentication.FederationConfiguration.IdentityConfiguration.SecurityTokenHandlers;
token = handlers.ReadToken(new XmlTextReader(new StringReader(context.Token)));
}我现在关心的是,我错过了这种行为背后的一些推理,而我上面的修正在某一时刻将会崩溃。
发布于 2013-03-04 14:14:37
我偶然发现了同样的问题。我看到令牌的xml表示形式和SecurityToken为空。我还注意到,这真的很容易复制通过杀死w3wp.exe。
发布于 2014-12-23 13:52:37
我通过删除浏览器cookie (包括Fedauth cookie )解决了这个问题。再一次调试,我能够获得所有所需的值。
发布于 2014-03-17 09:51:51
当我实现微软的ClaimsAwareWebFarm示例时,我也遇到了同样的问题。将此部分添加到web.config时会出现问题:
<caches>
<sessionSecurityTokenCache type="CacheLibrary.SharedSessionSecurityTokenCache, CacheLibrary">
<!--cacheServiceAddress points to the centralized session security token cache service running in the web farm.-->
<cacheServiceAddress url="http://localhost/SecurityTokenCacheService/SessionSecurityTokenCacheService.svc" />
</sessionSecurityTokenCache>
</caches>谢谢马特的解决办法!
https://stackoverflow.com/questions/13514553
复制相似问题