我使用Spring Boot - 2.6.6和Spring Security - 5.7.0-M2以及Spring - Security -saml2-service-provider库来创建SAML服务提供者应用程序。我遵循Spring的示例项目Spring Security SAML2 sample,所以我的设置看起来非常相似。
我想关闭位于/Login和/Logout上生成的Login和Logout页面。登录页面显示到配置的每个IDP的链接,注销页面有一个启动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
中发生的事情。