在IdP启动的单一LogOut与WSO2期间无法使Asp.Net会话无效

时间:2015-10-01 09:46:22

标签: asp.net-mvc session authentication wso2is

我们正在使用WSO2 Identity Server实施单点登录过程。我们同时涉及Microsoft和Java Web应用程序,我们在使用基于Microsoft的Web应用程序的Single LogOut处理期间遇到问题。该问题与Identity Provider启动的SLO上的会话失效有关。

这是情景:

  • 配置了单个身份提供商的WSO2 Identity Server
  • 使用ComponentSpace SAML2程序集的Asp.Net MVC应用程序和使用[Authorize]属性的Forms身份验证标记控制器,以确保用户通过身份验证来访问它们。
  • WSO2提供的用于测试SSO的DEMO Java Web应用程序

登录过程正常。我们从WSO2获取会话ID,用户在第一个应用程序中登录WSO2登录表单,并在第二个应用程序中透明地登录。

在Asp.Net webapp中,当成功登录时,我们验证用户访问[Authorize]标记的控制器,调用FormsAuthentication.SetAuthCookie(userName,false); 。当用户从其中一个应用程序注销时,WSO2会在配置的URI上向其他partecipants发送SLO请求。当Microsoft提出此请求时,我们调用FormsAuthentication.SignOut();方法但会话不会被破坏。如果用户刷新浏览器页面,其User.Authenticated属性仍为True,那么他仍然可以访问[授权]标记的控制器。这在我看来是有道理的,因为调用者是WSO2而不是用户浏览器。

我们在WSO2为Java应用程序提供的JAR代码中进行了一些调查,它在Tomcat上创建了一个过滤器,实现了一个单例,以便每次成功登录操作时都与会话对象存储WSO2会话ID关系。当WSO2请求SLO时,过滤器获取WSO2会话ID作为参数,访问单例HashTable以检索Session对象并调用会话对象的Session.Invalidate()方法。如果用户刷新浏览器,他将被重定向到登录页面。我们尝试在Asp.Net端实现类似的东西,但即使我们在服务器端获取Session对象并调用Session.Abandon()方法,当用户刷新浏览器时也没有任何反应。他仍然被标记为已通过身份验证。

我对Cookies不是很熟悉,我觉得这与他们有关。

有没有人遇到过类似的问题? 任何建议或建议都将非常感激。

由于

1 个答案:

答案 0 :(得分:0)

调用FormsAuthentication.SignOut应该清除身份验证cookie。我建议捕获HTTP流并确认身份验证cookie是否已被删除。身份验证cookie的默认名称是.ASPXAUTH。或者,它将是web.config部分中指定的名称。例如,表单name =“mycookie”会将cookie重命名为mycookie。您不必删除ASP.NET_SessionId会话ID cookie。