使用Curl测试Curity时兑换授权码返回invalid_grant错误如何解决
OAuth2 授权码兑换invalid_grant错误原因及解决方案
错误原因
- 首要问题:授权码填写错误。回调返回的完整授权码为
wQL8FsIjjb2Zd0G5Flki1y6LN6ij8Mc7,但curl命令中传递的code参数缺失了末尾的字符7,OAuth服务端无法匹配到已发放的有效授权码,直接返回无效授权错误。 - 其他可能诱因:
- 授权码已过期:绝大多数OAuth服务端的授权码有效期仅为10~300秒,生成后未及时兑换就会失效
- 授权码已被使用:授权码为一次性凭证,只要调用过一次token接口,哪怕请求失败也会直接作废
- 重定向地址不匹配:curl提交的
redirect_uri必须和第一步授权请求中的redirect_uri完全一致,协议、域名、路径、参数均不能有差异 - 客户端认证失败:
-u www:secret中填写的客户端密钥和服务端配置不匹配
解决方案
- 优先修正curl命令中的
code参数为回调返回的完整值,修正后的命令如下:
curl -Ssk -v \ -X POST https://mcc1sis0027:8098/oauth/v2/oauth-token \ -u www:secret \ -d grant_type="authorization_code" \ -d redirect_uri=https%3A%2F%2Flocalhost%2Fcallback \ -d code=wQL8FsIjjb2Zd0G5Flki1y6LN6ij8Mc7
- 确保拿到授权码后10秒内执行兑换命令,避免过期
- 若修正后仍报错,重新走第一步授权流程获取全新的授权码,拿到后立刻执行修正后的curl命令,不要重复使用历史授权码
- 核实客户端密钥、重定向地址是否和服务端配置完全一致
内容的提问来源于stack exchange,提问作者Chris
相关产品推荐
相关产品推荐

