java - 在 Spring 中使用 JWT 和 x509
问题描述
我必须在 Spring 中同时实现 JWT 和 x509。基本上情况是:
- 用户尝试输入一个端点,假设
/info
要做到这一点,他应该提供 JWT,如果他没有任何(或无效),则必须提供 x509 证书以标识自己 - 在确保这样的用户确实存在之后,将生成新的 JWT 并将其传递给用户,这样他就可以在请求提到的
/info
端点时向自己展示它
我不想在每个请求中都要求 x509 证书 - 就在 JWT 到期之后或缺少此类证书的情况下
现在,我已经分别实现了获取 JWT(工作正常)和使用 x509(工作正常)对用户进行身份验证,但是我在将这两个东西连接起来以按预期协同工作时遇到了麻烦。
智威汤逊部分:
http
.cors()
.and().csrf().disable()
.exceptionHandling().authenticationEntryPoint(authEntryPointJwt).and()
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.addFilter(new JwtAuthenticationFilter(authenticationManager()))
.addFilter(new JwtAuthorizationFilter(authenticationManager(), userService))
.authorizeRequests()
.antMatchers("/auth/**").permitAll()
.antMatchers("/**").authenticated();
x509部分:
http
.authorizeRequest()
.anyRequest()
.authenticated()
.and()
.x509()
.subjectPrincipalRegex("XX=(.*?)")
.userDetailsService(userDetailsService());
解决方案
推荐阅读
- swiftui - SwiftUI - 如何从其他视图触发动画
- typescript - 常量引用其自身值的类型
- node.js - Dockerfile 节点未安装依赖项
- node.js - 如何使用passport.js登录用户
- android - Recyclerview 未加载(它只是显示空屏幕)
- swift - Xcode 在 pod GoogleMobileAdsMediationAdColony 之后抱怨链接错误:“未定义符号:'_OBJC_CLASS_$_SKAdImpression'”
- javascript - 我需要向 javascript 中创建的输入发送一些文本
- node.js - PM2 集群模式 vs nginx 负载均衡(单主机)?
- android - 如何将 listView 的值存储在 ArrayList 中
- oracle - 云层中是否提供 Oracle 异构服务(ODBC 网关)?