You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Security OAuth2授权码模式出现unsupported_grant_type错误求助

问题分析与解决

出现unsupported_grant_type错误的核心原因是令牌请求的参数不符合OAuth2授权码流程的要求,以下是具体排查和修复步骤:

1. 确保POST请求包含所有必填参数

令牌请求必须以application/x-www-form-urlencoded格式提交,且包含以下核心参数:

  • grant_type=authorization_code:这是触发授权码流程的关键参数,缺失或值错误会直接抛出"不支持的授权类型"错误
  • code:你获取到的授权码(即TfzC56cc7xwa0wS-O0VvMm1k6kOhYchOcj7sW_pXyeEaRIvw9V6N5YuXoeqwQka1Cvf0ZY9EzGg0dM9zlCXLPYU3q7_T9KVsuc1_sGTV7XBxChPxtq1VRoxuuORfg3Zx)
  • redirect_uri:必须和授权请求(/oauth2/authorize)中使用的完全一致,即https://springone.io/authorized
  • code_verifier:你生成PKCE时的原始code_verifier值(注意不是code_challenge)
  • 客户端认证:因为你的客户端使用CLIENT_SECRET_BASIC认证方式,需要在请求头添加Authorization: Basic <base64编码的client:secret>,其中client:secret编码后为Y2xpZW50OnNlY3JldA==

2. 正确的请求示例(curl)

curl -X POST http://localhost:8080/oauth2/token \
  -H "Authorization: Basic Y2xpZW50OnNlY3JldA==" \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=authorization_code" \
  -d "code=TfzC56cc7xwa0wS-O0VvMm1k6kOhYchOcj7sW_pXyeEaRIvw9V6N5YuXoeqwQka1Cvf0ZY9EzGg0dM9zlCXLPYU3q7_T9KVsuc1_sGTV7XBxChPxtq1VRoxuuORfg3Zx" \
  -d "redirect_uri=https://springone.io/authorized" \
  -d "code_verifier=你的code_verifier值"

3. 额外优化提示

你的配置中accessTokenFormat设置为REFERENCE,会生成引用类型令牌而非JWT。如果需要JWT格式的访问令牌,修改TokenSettings:

TokenSettings.builder()
    .accessTokenFormat(OAuth2TokenFormat.SELF_CONTAINED) // 改为自包含格式(JWT)
    .accessTokenTimeToLive(Duration.ofSeconds(900))
    .build()

自定义的CustomRedirectUriValidator逻辑正确,不会导致当前错误,无需修改。

内容的提问来源于stack exchange,提问作者ayush

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 02:14:57