我正在尝试删除服务器端的WIF STS令牌cookie,但无法将其删除。它仅适用于客户端浏览器端而非服务器端。过去几天我一直在网上搜索,但还没有找到解决方案。
我发现并尝试没有运气的一些事情是: FederatedAuthentication.SessionAuthenticationModule.SignOut(); -FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Delete();
var test = HttpContext.Current.ApplicationInstance.Modules.Get(“WSFederationAuthenticationModule”)as Microsoft.IdentityModel.Web.WSFederationAuthenticationModule; test.SignOut(真); //抛出空错误
上述代码行在我的STS Web中处理注销。如果有人有任何建议我会非常感激。感谢
答案 0 :(得分:0)
看起来您正在使用WIF 1.0(3.5)。
使用WSFederationAuthenticationModule.FederatedSignOut Method。
这会向STS发送wsignout消息,STS删除cookie,向RP发送wsignoutcleanup,RP删除cookie。
您正在进行联合登录,因此请使用联合注销。
答案 1 :(得分:0)
nzpcmad - 感谢您的回复。我尝试了你的评论,它仍然不适合我。我的STS服务器会话cookie仍然存在。
正如我在此处所建议的那样是伪代码:
public ActionResult Logout() {
var authModule = FederatedAuthentication.WSFederationAuthenticationModule;
WSFederationAuthenticationModule.FederatedSignOut(new Uri(authModule.Issuer), new Uri(authModule.Realm));
return null;
}
(看起来该方法基本上将此消息发送给我的sts-“... sso.local.com/?wa=wsignout1.0&wreply=http%3a%2f%2fclient1.local.com%2f HTTP / 1.1" )
FederatedAuthentication.SessionAuthenticationModule.SignOut(); FederatedAuthentication.SessionAuthenticationModule.DeleteSessionTokenCookie(); FederatedAuthentication.SessionAuthenticationModule.CookieHandler.Delete();
然后通过在image-client1.local.com/?wa=wsignoutcleanup1.0中调用以下uri来清理依赖方
在客户端浏览器端,一切都很好用。但是,如果我保留一个小提琴手跟踪并进入过去的请求,我看到我仍在我的STS中进行身份验证,这让我相信它,因为我的STS服务器端auth cookie仍然存在。
您还有其他建议或意见吗?感谢
答案 2 :(得分:0)
使用默认配置,WIF将序列化cookie中的标识,并且服务器端没有存储状态。这意味着您可以在WIF令牌的生命周期内重播cookie。
您可以将WIF(4.5)设置为使用"参考模式",而不是将身份缓存在内存缓存中,并且只在cookie中包含引用。使用此设置,将在注销时在服务器上清除缓存的标识。
您可以在此处找到详细信息:http://brockallen.com/2013/02/10/beware-setting-properties-or-registering-events-on-the-sam-and-fam/
在负载均衡的情况下,您必须针对共享存储实施自己的sessionSecurityTokenCache
。这是一个指针:https://msdn.microsoft.com/en-us/library/hh568669(v=vs.110).aspx