如何在Authlib中通过Google Token端点验证Access Token?
Authlib下Google OAuth2 Access Token验证方案
问题根源
Google OAuth2不支持标准的RFC 7662令牌自省接口,所以你用Authlib的自省方法会无效。正确的做法是调用Google专属的Token信息端点来验证。
具体实现方法
方法1:直接发起HTTP请求验证
直接调用Google的tokeninfo端点,传入Access Token即可获取验证结果:
import requests import time def check_google_token_validity(access_token, client_id): res = requests.get( "https://oauth2.googleapis.com/tokeninfo", params={"access_token": access_token} ) if res.status_code != 200: return False, res.json().get("error_description", "Token invalid") token_info = res.json() # 必须验证aud(客户端ID)和exp(过期时间) is_valid = (token_info["aud"] == client_id) and (int(token_info["exp"]) > time.time()) return is_valid, token_info if is_valid else "Token mismatch or expired"
方法2:结合Authlib的OAuth2Session复用会话
如果你的代码已经在用Authlib的OAuth2Session,可以直接用它来发起请求,减少重复代码:
from authlib.integrations.requests_client import OAuth2Session import time def validate_token_with_authlib(session, access_token): res = session.get( "https://oauth2.googleapis.com/tokeninfo", params={"access_token": access_token} ) if not res.ok: return False token_info = res.json() # 验证客户端ID和过期时间 return token_info["aud"] == session.client_id and int(token_info["exp"]) > time.time()
关键验证点
- aud字段:必须和你的应用客户端ID完全匹配,防止其他应用的令牌被误用
- exp字段:将其转为整数后和当前时间戳对比,判断是否过期
- 可选验证:还可以检查
iss是否为https://accounts.google.com,进一步确保令牌来源合法
内容的提问来源于stack exchange,提问作者Kshitij Kasliwal
相关产品推荐
相关产品推荐

