SAML中的SLO是否可以在不同的浏览器上运行?

问题描述

我想知道Spring SAML for SP的实际情况,并以ADFS作为IDP对其进行测试,因为我所期望的SLO并没有发生。

  • Spring Boot版本:2.1.8.RELEASE
  • Java版本:1.8
  • ADFS版本:2.0

注意:我在所有不同的浏览器上都使用一个用户凭据,例如: user / user @ 123

我正在按照以下步骤实现SSO

  1. 从SP获取IDP列表
  2. 选择一个IDP并使用给定的IDP登录页面登录
  3. IDP向/saml/SSO发送请求
  4. 身份验证成功,会话开始

现在在此过程中,只要我打开另一个SP并尝试使用相同的IDP登录,它就会自动登录

对于SLO,以下是我要遵循的步骤

  1. 我正在通过点击/saml/logout上进一步处理的SAMLlogoutFilter上的SP来发起SLO请求
  2. 会话无效
  3. 我在浏览器A上所有已登录的SP的日志中看到一个logoutRequest。
  4. 注销成功,现在它要求浏览器A中所有SP的凭据。

当我在不同的浏览器上尝试SSO时,它会为第一个SP上的每个浏览器询问一次凭据,其余的SP会自动登录,我可以理解,因为其他浏览器没有该用户与之进行的用户会话数据想登录,但是在所有SP从不同的浏览器登录后,我猜IDP知道连接的SP,并且据我了解,当从任何SP启动SLO时,它应该在浏览器中注销所有SP。>

但是问题是,当从浏览器A启动SLO时,我看到注销请求以及SP都被注销,只有那些在同一浏览器A上登录的请求以及其余浏览器B和C SP仍被记录进入,并且如果没有为该浏览器实例显式启动/saml/logout,他们就不会要求提供凭据

SLO示例

SP1,SP2使用浏览器A登录

使用浏览器B登录的SP3

SP4和SP5使用浏览器C登录

从浏览器A-SP2启动SLO,然后注销SP1,但仍登录SP3,4和5

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...