SAML 注销请求未在 Spring Boot 3 和 Angular 的 POST 请求 /saml/logout 上发送

问题描述 投票:0回答:1

我正在使用 org.opensaml 和 spring-security-saml-service-provider 将 Spring Boot 后端迁移到 Spring Boot 3。一切都按预期进行,但注销很难开始工作。 (RP-发起)

如果我理解正确,根据文档:https://docs.spring.io/spring-security/reference/servlet/saml2/logout.html向端点/saml/logout自动创建的POST具有此配置的 SAML 应创建 SAML 注销请求和 SAML 注销响应(如 SAML 协议中所述)并清除会话(在此示例中是在 Keycloak 上)。

http.authorizeHttpRequests((authorize) -> authorize
                    .requestMatchers(SamlConfiguration.ERROR_AUTH_LANDING, SamlConfiguration.LOGOUT_AUTH_LANDING).permitAll()
                    .requestMatchers("/api/public/**", "/api/example/**", "/saml/**", "/logout/**", "/", "/api/user/**").permitAll().requestMatchers(FRONTEND_ROUTES).permitAll().requestMatchers(HttpMethod.OPTIONS).permitAll().requestMatchers(STATIC_RESOURCES).permitAll().requestMatchers(SWAGGER_RESOURCES).permitAll().anyRequest().authenticated())
.saml2Login(saml2 -> saml2.relyingPartyRegistrationRepository(relyingPartyRegistrationRepository)
.loginPage("/saml/login").successHandler(successRedirectHandler)
.failureHandler(samlAuthenticationFailureHandler))
.saml2Logout(Customizer.withDefaults());

Spring Boot 没有执行所有这些操作,而是使用由表单组成的响应做出反应,然后该表单将发送 SAML 请求。但是我无法利用该响应。 有谁知道如何在 Angular 前端处理这个问题?

  public logout(): Observable<void> {
    const endpoint = `${Endpoint.appBaseUrl}/saml/logout`;
    return this.http.get(endpoint, { responseType: 'text' }).pipe(
      map(() => {
        this.removeToken();
      })
    );
  }

我尝试创建一个 CustomSaml2LogoutSuccessHandler,它实现了一个执行 SAML 注销请求和响应的 LogoutSuccessHandler。然而,这会导致 CORS 错误。所以我认为这不是正确的方法。 我还尝试通过

设置注销服务网址
.singleLogoutServiceResponseLocation("{baseUrl}/saml/logout")

但是,这些想法都无法达到启动 SAML 注销请求/响应流程的预期结果。

有人有针对这种情况的解决方案吗?

angular spring-boot saml
1个回答
0
投票

面对同样的问题,你找到解决方案了吗?

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.