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

使用Django OAuth授权码流获取Token时遇invalid_grant错误

Django OAuth Toolkit授权码流获取令牌返回"invalid_grant"错误

问题场景

我正在使用Django OAuth Toolkit的**authorization code flow(授权码流)**获取访问令牌,授权类型为authorization_code。发起POST请求到令牌端点后,始终返回错误:

{"error": "invalid_grant"}

已确认授权码未过期,服务器与本地时间同步,授权码有效期为5分钟,有效期内仍无法正常获取令牌。

发起请求的curl代码

curl --location --request POST 'http://127.0.0.1:8000/o/token/' \
--header 'Content-Type: application/x-www-form-urlencoded' \
--header 'Cache-Control: no-cache' \
--header 'Accept: application/json' \
--data-urlencode 'client_id=ngta3GGa3jP6Rmv5Tspj97Bk4aiitHgv1EQilCDS' \
--data-urlencode 'client_secret=zLwMyuXg7WCSFwUDYBxFP3QxHh5mF6xM2hBsKyvRbypac5lV7fl2NoFeeDG3afWWxLedA7qtzD2Mvf68qyBra3A4iUXXlDXJO4LvxuZv4UULU6NLWlObpD0ylQSXbwZD' \
--data-urlencode 'code=q4NfBMbyTNbcIQZ4j7SfgMWL898psv' \
--data-urlencode 'redirect_uri=http://localhost:8000/no/callback/' \
--data-urlencode 'code_verifier=b'\''SlJDWEgyRzNYMks0RTVQVDlRVkFaOFdDUkxHV1A3QURMTjNITFdaMTBLU0tWQkkzMUVWVEZFU0k='\''' \
--data-urlencode 'grant_type=authorization_code'

排查方向与解决方案

  • 修正code_verifier格式:当前参数里带有Python字节字符串标识b'',实际请求需去掉包裹,直接传入原始字符串:SlJDWEgyRzNYMks0RTVQVDlRVkFaOFdDUkxHV1A3QURMTjNITFdaMTBLU0tWQkkzMUVWVEZFU0k=
  • 校验redirect_uri完全匹配:确保请求中的redirect_uri和获取授权码时使用的地址完全一致,包括协议、域名、端口、路径,哪怕末尾斜杠的差异都可能触发错误
  • 确认授权码未被复用:授权码是一次性凭证,一旦使用过就会失效,即使在有效期内也无法重复使用,需重新获取新的授权码
  • 检查客户端配置:在Django后台的OAuth应用设置中,确认客户端类型为confidential,授权类型包含authorization-code,且client_id、client_secret与请求参数完全一致
  • 排查中间件干扰:若项目启用了CSRF中间件,确认/o/token/端点已被排除在CSRF验证之外,自定义中间件可能会拦截或篡改请求参数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 02:50:41