如何使用 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.initDefaultLoginFilterSaml2LoginConfigurer.loginPage 未设置或 DefaultLoginPageGeneratingFilter 处于活动状态时。设置 loginPage 变量只会更改显示登录页面的位置,并破坏我的身份提供者的元数据配置:它 不会 关闭登录页面。我没有成功尝试关闭 DefaultLoginPageGeneratingFilter.

我该怎么做?

该示例已包含自动重定向到 IDP(在本例中为 Okta)并重定向回来所需的一切。因此,登录和注销页面只有在 URL 更改后才能访问。话虽如此,我明白了如果不使用它们为什么不受欢迎。

要禁用它们,最简单的方法是提供 AuthenticationEntryPoint。这将禁用生成登录和注销页面的过滤器。例如:

http.exceptionHandling((exceptions) -> exceptions
    .authenticationEntryPoint(new LoginUrlAuthenticationEntryPoint("/saml2/authenticate/two"))
)

之所以可行,是因为它明确地执行了 Sample2LoginConfigurer.init 中幕后发生的事情,同时还禁用了 Saml2LoginConfigurer.initDefaultLoginFilter.

中发生的事情