Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net WIF 4.5 BootstrapContext安全令牌为空_.net_Wcf_Security_Wif_Saml - Fatal编程技术网

.net WIF 4.5 BootstrapContext安全令牌为空

.net WIF 4.5 BootstrapContext安全令牌为空,.net,wcf,security,wif,saml,.net,Wcf,Security,Wif,Saml,我正在使用新的4.5 WIF工具对网站用户进行身份验证,并确保我的MVC网站和WCF服务之间的通信安全 我已将网站配置为保存引导上下文,以便可以对服务层的所有请求重新使用相同的安全令牌 在正常情况下,通过验证每个网站请求,并通过上下文提供SecurityToken来保护WCF调用,所有这些都可以正常工作 但是,如果网站应用程序域被重置(例如,在开发时构建应用程序),则对网站的任何请求仍将进行身份验证,但SecurityToken在上下文中不再可用于传递给WCF调用 调试it有4个有用的属性: S

我正在使用新的4.5 WIF工具对网站用户进行身份验证,并确保我的MVC网站和WCF服务之间的通信安全

我已将网站配置为保存引导上下文,以便可以对服务层的所有请求重新使用相同的安全令牌

在正常情况下,通过验证每个网站请求,并通过上下文提供SecurityToken来保护WCF调用,所有这些都可以正常工作

但是,如果网站应用程序域被重置(例如,在开发时构建应用程序),则对网站的任何请求仍将进行身份验证,但SecurityToken在上下文中不再可用于传递给WCF调用

调试it有4个有用的属性:

SecurityToken
SecutiryTokenHandler
Token
TokenBytes
应用前域重置SecurityToken和SecurityTokenHandler具有值,而重置后令牌具有值

重置后查看令牌的值看起来这是原始的SAML XML,因此我可以推测从中重新水化完整的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)));
}

我现在担心的是,我已经错过了这种行为背后的一些原因,我上面的修复程序在某个时候会崩溃。

我偶然发现了同样的问题。 我看到令牌的xml表示形式和SecurityToken为null。
我还注意到,通过杀死w3wp.exe,这非常容易复制。

当我从microsoft实现该示例时,也遇到了同样的问题。将此节添加到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>


谢谢你,马特

我通过删除浏览器cookie(包括Fedauth cookie)解决了这个问题。再次调试后,我能够在不同的WIF中获得所有需要的值?