gpt4 book ai didi

java - Spring Boot 2 : Basic Http Auth causes unprotected endpoints to respond with 401 "Unauthorized" if Authorization header is attached

转载 作者:行者123 更新时间:2023-12-01 00:17:12 25 4
gpt4 key购买 nike

在迁移到 Spring Boot 2 并为执行器和另一个应用程序控制端点添加基本授权要求后,不可能使用授权 header 调用任何未 protected 端点。

配置片段:

@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("shutdown")).fullyAuthenticated()
.antMatchers("/payment/status/*").fullyAuthenticated()
.and().httpBasic();
}

例如。使用“授权:基本 ...”调用 .../health 将导致 401“未经授权”,即使它不受 Spring 安全保护。

问题: 如何调整配置,以便可以将带有授权 header 的请求发送到任何不 protected 端点而不会被拒绝?

UPD: 这个修复如我所愿
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("shutdown")).fullyAuthenticated()
.antMatchers("/payment/status/*").fullyAuthenticated()
.antMatchers("/payment/**").permitAll()
.and().httpBasic();
}

UPD2: 没关系,刚刚测试了另一个请求,但仍然收到 401“未经授权”。
curl localhost:8080/payment/<any_endpoint> -H "Authorization: Basic asdadas"
{"code":401,"message":"Unauthorized"}

不幸的是,这种方法覆盖了 HttpSecurity 匹配器,例如:/payment/变得可访问
@Override
public void configure(HttpSecurity http) throws Exception {
http.csrf().disable()
.authorizeRequests()
.requestMatchers(EndpointRequest.to("shutdown")).fullyAuthenticated()
.antMatchers("/payment/status/*").fullyAuthenticated()
.and().httpBasic();
}

@Override
public void configure(WebSecurity webSecurity) throws Exception {
webSecurity.ignoring().antMatchers("/payment/**");
}

UPD 3: 我创建了一个简单的项目来重现这个问题
https://github.com/Anoobizzz/SpringSecurity2BasicAuthDemo
  • /internal &/shutdown 只能由用户访问:P455W0RD
  • /exposed 未经授权可访问
  • /exposed with header "Authorization: Basic 123123"响应 401 "Unauthorized"
  • 最佳答案

    通过调用 .authorizeRequests() ,您强制对所有这些请求进行授权,因为您没有在某些匹配器上调用 .ignore()

    我建议在 ignore 匹配器上使用 **,然后在 permit-all 层之上的指定匹配器上逐步实现授权,以便除明确指定的之外的所有内容都可以访问。

    这可以完成您想要做的事情,但要注意,这不是最佳实践,理由很充分:您应该默认拒绝所有未经授权的流量,并且只明确允许对特定路由模板的未经授权的请求。

    也就是说,在您希望无需身份验证即可访问的路由上明确使用 ignore 会更明智,而不仅仅是 ** (例如仅用于 /home - /about - /login - /signup )

    关于java - Spring Boot 2 : Basic Http Auth causes unprotected endpoints to respond with 401 "Unauthorized" if Authorization header is attached,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51496100/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com