如何使用 Spring SAML2 禁用自动生成的页面 /login 和 /logout?
How do you disable the auto generated pages /login and /logout using Spring SAML2?
我正在使用 Spring Boot - 2.6.6 和 Spring Security - 5.7.0-M2 以及 spring-security-saml2-service-provider 库来创建一个SAML 服务提供商应用程序。我遵循了 Spring 的示例项目 Spring Security SAML2 Sample,因此我的设置看起来非常相似。
我想关闭位于 /login 和 /logout 上的生成的登录和注销页面。登录页面为每个配置的 IDP 显示 link,注销页面有一个启动 POST 注销流程的按钮。
它们似乎是由 Spring 的内部代码创建的 - Saml2LoginConfigurer.initDefaultLoginFilter
当 Saml2LoginConfigurer.loginPage
未设置或 DefaultLoginPageGeneratingFilter
处于活动状态时。设置 loginPage
变量只会更改显示登录页面的位置,并破坏我的身份提供者的元数据配置:它 不会 关闭登录页面。我没有成功尝试关闭 DefaultLoginPageGeneratingFilter
.
我该怎么做?
该示例已包含自动重定向到 IDP(在本例中为 Okta)并重定向回来所需的一切。因此,登录和注销页面只有在 URL 更改后才能访问。话虽如此,我明白了如果不使用它们为什么不受欢迎。
要禁用它们,最简单的方法是提供 AuthenticationEntryPoint
。这将禁用生成登录和注销页面的过滤器。例如:
http.exceptionHandling((exceptions) -> exceptions
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/saml2/authenticate/two"))
)
之所以可行,是因为它明确地执行了 Sample2LoginConfigurer.init
中幕后发生的事情,同时还禁用了 Saml2LoginConfigurer.initDefaultLoginFilter
.
中发生的事情
我正在使用 Spring Boot - 2.6.6 和 Spring Security - 5.7.0-M2 以及 spring-security-saml2-service-provider 库来创建一个SAML 服务提供商应用程序。我遵循了 Spring 的示例项目 Spring Security SAML2 Sample,因此我的设置看起来非常相似。
我想关闭位于 /login 和 /logout 上的生成的登录和注销页面。登录页面为每个配置的 IDP 显示 link,注销页面有一个启动 POST 注销流程的按钮。
它们似乎是由 Spring 的内部代码创建的 - Saml2LoginConfigurer.initDefaultLoginFilter
当 Saml2LoginConfigurer.loginPage
未设置或 DefaultLoginPageGeneratingFilter
处于活动状态时。设置 loginPage
变量只会更改显示登录页面的位置,并破坏我的身份提供者的元数据配置:它 不会 关闭登录页面。我没有成功尝试关闭 DefaultLoginPageGeneratingFilter
.
我该怎么做?
该示例已包含自动重定向到 IDP(在本例中为 Okta)并重定向回来所需的一切。因此,登录和注销页面只有在 URL 更改后才能访问。话虽如此,我明白了如果不使用它们为什么不受欢迎。
要禁用它们,最简单的方法是提供 AuthenticationEntryPoint
。这将禁用生成登录和注销页面的过滤器。例如:
http.exceptionHandling((exceptions) -> exceptions
.authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/saml2/authenticate/two"))
)
之所以可行,是因为它明确地执行了 Sample2LoginConfigurer.init
中幕后发生的事情,同时还禁用了 Saml2LoginConfigurer.initDefaultLoginFilter
.