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/authorizedcode_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
相关产品推荐
相关产品推荐

