使用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('=')- 采用S256方法时,
检查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
相关产品推荐
相关产品推荐

