使用Spring Security在同一应用程序中基于SAML2和基于表单的登录

问题描述

我正在尝试找出如何在我们的应用程序中同时支持大多数用户的基于表单的登录和某些用户的基于saml2(Spring Security 5.4)的登录

  1. 访问app.exampleapp.com的用户重定向为表单登录
  2. 访问sso.exampleapp.com的用户重定向到SAML2 Identity Provider登录

我尝试使用单个Java配置来处理两种类型,但这根本不起作用。因此,我尝试使用一种用于表单登录的配置和一种用于saml2登录的单独配置。但是我也无法正常工作。其中一个似乎优先于另一个。如果禁用saml2配置,则可以使用表单登录登录;如果禁用表单登录配置,则可以使用SSO / Keycloak登录。但是我无法使两个配置同时工作。

我有一个RequestMatcher,它在每个安全配置中的子域上都匹配。

Saml2登录配置

http
    .requestMatcher(new SubdomainSecurityMatcher("sso"))
    .authorizeRequests()
    .antMatchers("/**")
    .authenticated()
    .and()
    .saml2Login(withDefaults())

表单登录配置

http
    .requestMatcher(new SubdomainSecurityMatcher("app"))
    .authorizeRequests()
    .antMatchers("/**")
    .authenticated()
    .and()
    .formLogin()

我是否需要自定义AuthenticationEntryPoint来决定要执行的登录处理?

我尝试了很多事情,但是我不确定它是否或如何工作。有人设法对Spring Security 5.4中的新SAML2支持做类似的事情吗?

解决方法

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

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

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

相关问答

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