【问题标题】:Spring security 5.2+ SAML2 multiple IDPs logoutSpring security 5.2+ SAML2 多个 IDP 注销
【发布时间】:2020-06-24 17:18:47
【问题描述】:

SAML2 支持是 Spring Security 库的新增功能。

据此: https://github.com/spring-projects/spring-security/blob/master/docs/manual/src/docs/asciidoc/_includes/servlet/saml2/saml2-login.adoc

Saml 2 Login - Not Yet Supported
    1. Mappings assertion conditions and attributes to session features (timeout, tracking, etc)
    2. Single logout
    3. Dynamic metadata generation
    4. Receiving and validating standalone assertion (not wrapped in a response object)

当前版本不支持单点注销,这对于有多个身份提供者的情况是必不可少的。

为多个 IDP 启用单次注销的正确解决方法是什么?

【问题讨论】:

    标签: java spring spring-security saml-2.0 spring-saml


    【解决方案1】:

    Spring Security 将提供的单一注销功能是针对一个 IdP 注销多个 SP,而不是多个。

    用户的典型流程是登录到某个 IdP,然后在他们的会话过程中被重定向到一个或多个 SP。当他们单击注销时,将结束他们最初与该 IdP 建立的会话。

    在 Spring Security 中解决此问题的方式是通过 LogoutSuccessHandler。在 SP 成功终止其会话(单击注销按钮)后调用LogoutSuccessHandlers。您可以想象一个 LogoutSuccessHandler 将重定向到 IDP 的 SLO 端点或命中后端 IDP 注销端点。

    SP 尝试合并由登录到一个 IdP 的用户发起的会话与来自同一用户登录到另一个 IdP 的会话并不常见,我认为您正在描述这种用例。但是,如果您觉得我遗漏了什么,请随时添加更多细节。

    【讨论】:

    • 如果是单个 IDP,我希望单个注销重定向到 IDP 并在那里注销,然后重定向回 SP 以清除 cookie。因此,下一次尝试查看来自 SP 的安全内容将需要用户输入凭据。据我了解,当前实现仅清除 SP 的 cookie/会话。不会要求用户登录以获取安全内容,因为 IDP 将立即使用从未清除的身份验证令牌重定向回 SP。
    • 因此,即使对于单个 IDP,我也需要通过查找 IDP URL 以注销用户来解决它。正确的?对于多个,我首先需要了解使用哪个 IDP,然后找到它的 URL。还是我错过了什么?
    • 是的,您需要添加一个 LogoutSuccessHandler 来重定向到 IdP。大多数 IdP 记录他们的注销端点。
    • 据我了解,应该是相反的。我必须先点击一个 IDP URL 才能注销,然后通过将其进一步重定向到本地注销 URL 来处理重定向。
    猜你喜欢
    • 1970-01-01
    • 2020-08-24
    • 2020-10-06
    • 1970-01-01
    • 2020-06-22
    • 2017-03-25
    • 2015-01-03
    • 2018-12-18
    • 2020-04-02
    相关资源
    最近更新 更多