Cookies Windows Identity Foundation:如何删除服务器端的STS令牌cookie

Cookies Windows Identity Foundation:如何删除服务器端的STS令牌cookie,cookies,token,wif,Cookies,Token,Wif,我正在尝试删除服务器端的WIF STS令牌cookie,但无法将其删除。它仅在客户端浏览器上工作,而不在服务器上工作。过去几天我一直在网上搜索,但没有找到解决办法 我发现并尝试过的一些事情运气不佳: FederatedAuthentication.SessionAuthenticationModule.SignOut()-FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();Federated

我正在尝试删除服务器端的WIF STS令牌cookie,但无法将其删除。它仅在客户端浏览器上工作,而不在服务器上工作。过去几天我一直在网上搜索,但没有找到解决办法

我发现并尝试过的一些事情运气不佳: FederatedAuthentication.SessionAuthenticationModule.SignOut()-FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Delete()

var test=HttpContext.Current.ApplicationInstance.Modules.Get(“WSFederationAuthenticationModule”)为Microsoft.IdentityModel.Web.WSFederationAuthenticationModule; 测试。注销(真)//抛出一个空错误


上述代码行在我的STS web中被调用,用于处理注销。如果有人有任何建议,我将不胜感激。谢谢

看起来您正在使用WIF 1.0(3.5)

使用

这将向STS发送wsignout消息,STS删除Cookie,向RP发送wsignoutcleanup,RP删除Cookie


您正在进行联合登录,因此请使用联合注销。

nzpcmad-感谢您的回复。我试过你的评论,但仍然不适合我。我的STS服务器会话cookie仍处于活动状态

正如我在伪代码中所做的那样:

  • 关于我的依赖方的注销方法

    公共操作结果注销() {

  • (看起来该方法基本上将此消息发送到我的sts-“…sso.local.com/?wa=wsignout1.0&wreply=http%3a%2f%2fclient1.local.com%2f http/1.1”)

  • 在我的STS上(这里是sso.local.com) 我查找wa=wsignout1.0并使用以下命令处理我的注销
  • FederatedAuthentication.SessionAuthenticationModule.SignOut();FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie();FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Delete()

    然后通过从image-client1.local.com/?wa=wsignoutcleanup1.0中调用以下uri对依赖方进行清理

    在客户端浏览器端,一切都很好。但如果我保持fiddler跟踪并进入过去的请求,我会看到我仍然在我的STS中进行身份验证,这让我相信这是因为我的STS服务器端身份验证cookie仍然存在


    您还有其他建议或意见吗?谢谢使用默认配置,WIF将序列化cookie中的标识,并且服务器端没有存储任何状态。这意味着您可以在WIF令牌的生存期内重播cookie

    您可以将WIF(4.5)设置为使用“引用模式”,该模式将在内存缓存中缓存标识,并且仅在cookie中包含引用。使用此设置,注销时将在服务器上清除缓存的标识

    您可以在此处找到详细信息:


    在负载平衡的情况下,您必须针对共享存储实现自己的
    会话安全缓存
    。这里有一个指针:

    所以您使用的是自定义STS?如果您在注销后再次在浏览器中导航到RP,您必须进行身份验证吗?您确定浏览器不会通过WIA自动再次记录您吗?顺便问一下,您不应该通过创建另一个问题来回答。您应该扩展原始问题并添加注释我以前的回答对于注释框来说太长:)n想要获得尽可能多的信息…回答您的问题:-是的,使用WIF我创建了一个web作为我的STS(基本上是为了验证和颁发安全令牌。)-如果我在注销后导航到RP,是的,我必须再次进行身份验证。如果我让Fiddler在后台运行,注销我的RP。返回Fiddler并使用Auth Cookie重播http请求,它会将SAML传递回我。如果我通过VS调试器进入我的STS代码,我仍然通过身份验证。我的期望-重定向到登录页面。而不是su你是我做错了什么…klings我在WIF 4.5中尝试了你的建议,效果很好。但不幸的是,我需要WIF 3.5的解决方案,而此“isReference”模式属性不可用。在WIF 3.5上运行的RP中,我尝试了“IsSessionMode”但它似乎不起作用。下面是我添加到RP web中的Global.asax.cs文件中的代码:void WSFederationAuthenticationModule_SessionSecurityTokenCreatedEventArgs e(对象发送方,SessionSecurityTokenCreatedEventArgs e){FederatedAuthentication.SessionAuthenticationModule.IsSessionMode=true;}除了迁移4.5之外,您还有其他解决方案吗
    var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
        WSFederationAuthenticationModule.FederatedSignOut(new Uri(authModule.Issuer), new Uri(authModule.Realm));
    
        return null;
    }