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

使用Django OAuth2.0获取AccessToken时遇invalid_grant错误求助

解决Django OAuth Toolkit的"invalid_grant"错误

以下是针对该错误的具体排查和解决步骤:

  • 确认授权码(CODE)有效性
    OAuth2的授权码是一次性凭证,使用后立即失效,且有较短的过期时间(通常几分钟)。确保你使用的是刚从授权端点获取的、未被使用过的CODE。

  • 验证PKCE参数匹配性
    若使用PKCE流程,必须保证获取授权码时的CODE_CHALLENGE是由当前CODE_VERIFIER生成的:

    • 采用S256方法时,CODE_CHALLENGE是CODE_VERIFIER的SHA256哈希值做base64url编码后的结果
    • 采用plain方法时,CODE_CHALLENGE与CODE_VERIFIER完全一致
      可通过以下代码生成合规的参数测试:
    import base64
    import hashlib
    import secrets
    
    code_verifier = secrets.token_urlsafe(64)
    code_challenge = base64.urlsafe_b64encode(hashlib.sha256(code_verifier.encode()).digest()).decode().rstrip('=')
    
  • 检查redirect_uri完全一致
    获取授权码时使用的redirect_uri必须与请求token时的完全相同,包括协议、域名、端口、路径,任何细微差异都会导致错误。

  • 核对客户端凭据
    确认client_id和client_secret与Django后台创建的应用完全匹配,且该应用的授权类型已包含authorization_code。

  • 查看Django日志获取详情
    在settings.py中配置日志输出,查看oauth2_provider的调试信息:

    LOGGING = {
        'version': 1,
        'disable_existing_loggers': False,
        'handlers': {
            'console': {
                'class': 'logging.StreamHandler',
            },
        },
        'loggers': {
            'oauth2_provider': {
                'handlers': ['console'],
                'level': 'DEBUG',
            },
        },
    }
    

    运行Django后,控制台会输出具体错误原因,比如授权码不存在、参数不匹配等。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 20:19:58