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

如何在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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 14:10:11