Spring Boot部署UAT环境偶发403 Forbidden问题求助
本地正常但UAT环境API偶发403 Forbidden问题
本地环境系统运行完全正常,但部署至UAT环境后,所有API会偶发403 Forbidden错误,同一API有时可正常调用,偶发性问题原因不明。
相关安全配置代码如下:
@Configuration public class JWTSecurityConfig extends WebSecurityConfigurerAdapter { @Autowired MyJwtAuthenticationManagerResolver trustedIssuerJwtAuthenticationManagerResolver; @Override protected void configure(HttpSecurity http) throws Exception { http.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS); http.cors().and().csrf().disable(); http.authorizeHttpRequests(authorize -> authorize.antMatchers("/oed/api/**").authenticated()).oauth2ResourceServer( oauth2ResourceServer -> oauth2ResourceServer.authenticationManagerResolver( this.trustedIssuerJwtAuthenticationManagerResolver)); } @Bean CorsConfigurationSource corsConfigurationSource() { CorsConfiguration configuration = new CorsConfiguration(); configuration.setAllowedOrigins(Arrays.asList("*")); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "OPTIONS", "PUT")); UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource(); source.registerCorsConfiguration("/**", configuration); return source; } }
可能的原因及排查方向
- JWT issuer 验证链路异常:配置中使用了自定义的
MyJwtAuthenticationManagerResolver,如果UAT环境到issuer的元数据接口(如JWKS端点)存在网络波动、超时,或者resolver内部的缓存、重试逻辑不完善,会偶发导致JWT验证失败触发403。需检查UAT环境与issuer服务器的网络稳定性,以及resolver的实现逻辑是否存在漏洞。 - 代理/负载均衡的请求头丢失:UAT环境通常存在负载均衡或反向代理,若代理层偶发丢失、截断
Authorization请求头,后端无法获取有效JWT令牌,会直接返回403。可以在API入口处添加日志,记录每次请求的Authorization头是否完整存在。 - 系统时钟偏移:如果UAT服务器与认证服务器的系统时钟偏差过大,超出JWT验证的
leeway范围,会偶发性判定令牌过期。需检查两台服务器的时钟同步状态,确保偏差在允许范围内。 - 认证管理器的线程安全问题:若
MyJwtAuthenticationManagerResolver内部存在非线程安全的逻辑(如未正确处理的缓存变量),高并发场景下会偶发验证失败。需检查该类的实现是否满足线程安全要求。 - CORS预请求异常:虽然配置了允许所有来源,但UAT环境的跨域预请求(OPTIONS)若偶发处理失败,可能间接导致后续业务请求被拦截。可检查UAT环境的OPTIONS请求是否均能正常返回200状态码。
排查建议
- 在UAT环境的认证拦截逻辑中添加详细日志,记录每次请求的令牌内容、验证步骤及错误信息(若验证失败),精准定位偶发失败的触发条件。
- 模拟UAT环境到issuer元数据接口的网络波动场景,验证是否会触发403错误。
- 检查代理/负载均衡服务器的配置,确认
Authorization头被正确转发,未被篡改或丢弃。 - 对比本地与UAT环境的JWT验证配置(如
leeway参数、issuer白名单),排除配置差异导致的问题。
内容的提问来源于stack exchange,提问作者Chetan Oswal
相关产品推荐
相关产品推荐

