当前位置: 首页 > 知识库问答 >
问题:

无法在Spring security SAML SSO中更改默认的“回复Url”(断言消费者服务位置)

曹理
2023-03-14

我正在使用Spring安全性 Saml 2.0 和 SSO(单点登录)的Spring启动,并将 azure 作为标识提供者。

Spring Security使用“{baseUrl}/login/saml2/sso/{registrationId}”作为默认的“回复Url”,

但我想使用“{baseUrl}/登录/{注册Id}”

所以根据我写的官方文件

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

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

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

共有1个答案

岳朝
2023-03-14

在源代码中环顾四周,我找到了解决方案

事实证明,您必须在两个位置更新“回复URL”链接

  1. RelyingPartyRegistration应用程序中。属性

这将告诉Spring成功登录后页面将被重定向到何处,在此URL上,IP(身份提供商)将以XML格式提供SAML响应。

因此,我们必须明确告诉Spring期望SAML在这个URL上响应并解析它。

@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}"));
   }
}

这将更新 Saml2WebSso 身份验证筛选以使用 /login/{注册 Id} 进行 SAML 解析,而不是 /login/saml2/sso/{注册 Id}

 类似资料:
  • 我正在尝试使用ReplyingKafkaTemplate,偶尔会看到下面的消息。 没有待处理的回复:消费者记录(主题=请求-回复-主题,分区=8,偏移量=1,创建时间=1544653843269,序列化密钥大小=-1,序列化值大小=1609,标题=记录标题(标题=[记录标题(键=kafka_correlationId,值=[-14,65,21,-118,70,-94,72,87,-113,-91,

  • 我已经这样配置了我的axios 在我的组件中,我作为 现在,上面的方法可以工作了,但是我想在不影响全局基本URL的情况下更改,这样在我的组件中,我就可以在没有APIendpoint的情况下简单地使用它 我已经试过了 我该怎么办?

  • 我们正在使用Spring Security SAML2与许多身份提供者一起开发SAML身份验证。我们的服务提供者的元数据文件是唯一的,它将分发给所有身份提供者,因此我们需要为断言消费者服务提供唯一的endpoint。 yaml配置如下所示: 我们尝试添加每个IDP 但是找不到url结果。 我们如何配置它? 谢啦

  • 我使用的是tomcat,每当我转到一个servlet无法处理的方向时,我都想做其他事情,比如显示默认错误: 我在哪里可以处理这个问题¿? 先谢谢你了

  • Feign介绍 Feign是一个声明式的web service客户端,它使得编写web service客户端更为容易。创建接口,为接口添加注解,即可使用Feign。Feign可以使用Feign注解或者JAX-RS注解,还支持热插拔的编码器和解码器。Spring Cloud为Feign添加了Spring MVC的注解支持,并整合了Ribbon和Eureka来为使用Feign时提供负载均衡。 译自:h

  • Ribbon介绍 Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起。Ribbon客户端组件提供一系列完善的配置项如连接超时,重试等。简单的说,就是在配置文件中列出Load Balancer后面所有的机器,Ribbon会自动的帮助你基于某种规则(如简单轮询,随机连接等)去连接这些机器。我们也很容易使用Ribbon实现自定义的负