gpt4 book ai didi

java - Spring Boot 安全性 - 如果缺少授权 header ,则使用 Cookie 中的 token

转载 作者:行者123 更新时间:2023-12-04 12:16:33 25 4
gpt4 key购买 nike

我目前根据我的授权服务器的 JWK 验证我的请求。
我正在使用 spring-boot-starter-oauth2-resource-server spring-boot 2.3 上的包。
JWT 从 Authorization: Bearer <token> 中取出 header 并针对 JWK 端点进行验证。
我的安全配置如下所示:

安全配置文件

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Autowired
protected Environment env;

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/logs").permitAll();
http.authorizeRequests().antMatchers("/", "/api/**").authenticated();
http.oauth2ResourceServer().jwt();
}
}

应用程序属性
spring.security.oauth2.resourceserver.jwt.jwk-set-uri=https://auth.work.com/v1/jwk

外部用户没有 Authorization: ...在他们的请求中添加 header ,而是使用以下 2 个 cookie 来组成 JWT:
auth.token_type = Bearer
auth.access_token = <token>

如果 Authorization: ...,有没有办法从 cookie 中提取 JWT 并针对身份验证服务器进行验证?标题不见了?
我可以在请求授权之前提取 cookie 并为其添加 header 吗?
或者它甚至可能是身份验证链中的第二种方法。

最佳答案

我发现了自定义 token 解析器,并最终创建了一个来验证 header 和 cookie。我不确定这是否是最干净的解决方案,但它有效。
我遇到的唯一问题是它不会自动验证 Authorization: Bearer ...标题了,所以我也不得不为它添加代码。

@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

@Override
protected void configure(HttpSecurity http) throws Exception {
http.csrf().disable();
http.authorizeRequests().antMatchers("/logs").permitAll();
http.authorizeRequests().antMatchers("/", "/api/**").authenticated();
http.oauth2ResourceServer().jwt().and().bearerTokenResolver(this::tokenExtractor);
}

public String tokenExtractor(HttpServletRequest request) {
String header = request.getHeader(HttpHeaders.AUTHORIZATION);
if (header != null)
return header.replace("Bearer ", "");
Cookie cookie = WebUtils.getCookie(request, "auth.access_token");
if (cookie != null)
return cookie.getValue();
return null;
}
}

关于java - Spring Boot 安全性 - 如果缺少授权 header ,则使用 Cookie 中的 token ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62140293/

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