微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

无法更改 Spring 安全 SAML SSO 中的默认“回复 URL”断言消费者服务位置

如何解决无法更改 Spring 安全 SAML SSO 中的默认“回复 URL”断言消费者服务位置

我将 spring security Saml 2.0 与 spring boot 一起用于 SSO(单点登录),以 azure 作为身份提供者。

Spring security 使用“{baseUrl}/login/saml2/sso/{registrationId}”作为认的“回复网址”,

但我想使用“{baseUrl}/login/{registrationId}”

所以遵循Official documentation 我写了

RelyingPartyRegistration relyingPartyRegistration = RelyingPartyRegistrations
                .fromMetadataLocation("https://login.microsoftonline.com/<Metadata url>")
                .registrationId("azure")
                .entityId("{baseUrl}")
                .assertionConsumerServiceLocation("{baseUrl}/login/{registrationId}")
                .build();

通过这个我进入登录页面,但之后有登录无限循环......

Spring Boot 无法 POST 到 /login/azure

o.s.security.web.FilterChainProxy        : Securing POST /login/azure
s.s.w.c.SecurityContextPersistenceFilter : Set SecurityContextHolder to empty SecurityContext
o.s.security.web.csrf.CsrfFilter         : Invalid CSRF token found for http://localhost:8080/login/azure
o.s.s.w.access.AccessDeniedHandlerImpl   : Responding with 403 status code

我已尝试允许此端点的 CSRF 并允许所有访问,但随后它无法解析元数据。

我发现它是在过滤器“Saml2WebSsoAuthenticationFilter”中实现的

解决方法

查看源代码我找到了解决方案。

事实证明你必须在 2 个地方更新“回复 URL”链接

  1. RelyingPartyRegistrationapplication.properties 中,正如我所讨论的那样。

这将告诉 Spring 在成功登录后页面将被重定向到哪里,在此 URL IP(身份提供者)将提供 XML 格式的 SAML 响应。

  1. WebSecurityConfigurerAdapter

所以我们必须明确地告诉 Spring 期望这个 URL 上的 SAML 响应并解析它。

@EnableWebSecurity
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        
        http
                .authorizeRequests(authorize -> authorize
                        .anyRequest().authenticated()
                )
                .saml2Login(h -> h.loginProcessingUrl("/login/{registrationId}"));
   }
}

这将更新 Saml2WebSsoAuthenticationFilter 以使用 /login/{registrationId} 而不是 /login/saml2/sso/{registrationId}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。