AWS服务器部署OIDC服务后调用所有接口返回400 Bad Request错误
排查思路
- AWS网络层校验优先排查
首先检查AWS侧的WAF、ALB/CLB规则是否过滤了自定义请求头x-username,或者对Authorization头的长度做了截断限制,部分云厂商WAF默认会拦截未在白名单的自定义头,也会对过长的Bearer Token做截断导致OIDC服务解析失败。 - 请求头转发校验
检查AWS上的负载均衡、API网关是否配置了透传自定义请求头,默认情况下部分AWS网关不会透传非标准请求头到后端服务,会导致你的x-username参数丢失,OIDC认证逻辑缺少必填参数返回400。 - Spring Session配置校验
日志显示每次请求都会创建新的HTTP会话,说明AWS部署环境下会话未持久化/未正确共享,检查你是否配置了基于Redis/数据库的分布式会话,本地是单机环境会话存在JVM内存中正常,AWS多实例部署或者无状态配置下会话丢失会导致认证上下文无法继承,触发400错误。 - OIDC服务网络连通性校验
检查AWS服务器的安全组、NAT网关规则是否允许访问OIDC认证服务器的地址,本地可以正常访问OIDC服务不代表AWS环境的网络策略放通了对应端口和域名,若OIDC服务调用失败也会返回400错误。 - TokenRelay配置冲突排查
日志栈中出现AccessTokenContextRelay.copyToken调用,你当前同时使用了UAA的TokenRelay自动配置和自定义OIDC认证逻辑,两者存在冲突:TokenRelay默认会尝试从会话中获取AccessToken,会话为空时会抛出异常被捕获转为400响应,可在配置文件中添加spring.cloud.security.resource-server.token-relay.enabled=false关闭默认TokenRelay逻辑,验证是否解决问题。 - OIDC过滤器执行逻辑校验
你的安全过滤器链中OIDCRequestFilter放在LogoutFilter之后,检查该过滤器是否正确解析了透传过来的请求头,是否对AWS环境的请求路径(比如负载均衡加的上下文前缀)做了适配,可在该过滤器中添加全量请求头日志,确认AWS环境下传入的头参数和本地是否一致。
内容的提问来源于stack exchange,提问作者sromit
相关产品推荐
相关产品推荐

