Spring Security OAuth2 invalid_grant问题排查求助
OAuth2授权码
invalid_grant问题排查建议 校验授权码基本有效性
- 确认授权码是否已被使用:授权码是一次性凭证,哪怕换令牌请求失败,部分认证服务器也会标记其为已使用,导致后续请求失效
- 检查授权码过期时间:核实认证服务器的授权码过期配置,若过期时间过短,可能换令牌时凭证已失效
严格核对
redirect_uri一致性
调用/oauth2/token时传入的redirect_uri,必须与调用authorize端点时的参数完全一致,包括协议(http/https)、域名、端口、路径,甚至末尾的斜杠都不能有差异验证客户端身份合法性
- 确认
/oauth2/token请求是否正确传递客户端凭证:若使用客户端密码模式,需在请求头或表单中正确传入client_id和client_secret,且与认证服务器配置的凭证完全匹配 - 检查客户端权限:确认该客户端是否被允许使用
authorization_code授权类型,或是否被认证服务器标记为禁用
- 确认
排查请求参数格式问题
- 确保
/oauth2/token请求的Content-Type为application/x-www-form-urlencoded,不能用JSON格式传递参数 - 检查授权码、
redirect_uri等参数的URL编码:特殊字符未正确编码会导致服务器解析失败,触发无效授权错误
- 确保
检查认证服务器配置与存储
- 查看认证服务器的授权码存储(数据库/Redis等),确认对应记录的状态、关联客户端ID、
redirect_uri是否正确 - 强制开启认证服务器的Debug级日志(比如调整Spring Security OAuth2日志级别为
DEBUG),聚焦授权码校验阶段的日志输出,获取更详细的报错细节
- 查看认证服务器的授权码存储(数据库/Redis等),确认对应记录的状态、关联客户端ID、
排查网络与代理干扰
- 确认代理服务器是否在转发请求时修改了参数或请求头,比如截断授权码、添加额外参数,导致认证服务器校验失败
- 若认证服务器采用负载均衡部署,检查授权码是否存储在实例本地缓存中,换令牌请求被转发到其他实例后无法匹配到凭证
内容的提问来源于stack exchange,提问作者AttilaGal
相关产品推荐
相关产品推荐

