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

如何在Google Cloud Function中实现多端点?需新增Id Token撤销端点

单个Google Cloud Function承载多端点的实现方案

完全可以在单个Google Cloud Function里实现多个端点,Python的functions-framework本质基于Flask构建,你可以通过请求路径区分不同业务逻辑。结合你的需求,具体修改方案如下:

核心思路

把原有的单个业务函数改成统一的HTTP入口函数,根据请求的path字段(比如/validate或/revoke)分发到对应处理逻辑,同时复用你已有的validate_auth函数做身份校验。

修改后的完整代码

import functions_framework
import firebase_admin
from firebase_admin import auth, credentials
from flask import abort, request

# 初始化Firebase Admin
cred = credentials.Certificate('../credentials-dev.json')
firebase_admin.initialize_app(cred)

@functions_framework.http
def handle_requests(request):
    # 根据请求路径分发业务逻辑
    if request.path == '/validate':
        return handle_validate(request)
    elif request.path == '/revoke':
        return handle_revoke(request)
    else:
        abort(404, description="Invalid endpoint")

def handle_validate(request):
    # 复用原有Token验证逻辑
    user_uid = validate_auth(request)
    return f"Validated user UID: {user_uid}"

def handle_revoke(request):
    try:
        # 先验证Token合法性,确保操作来自授权用户
        user_uid = validate_auth(request)
        # 撤销该用户所有刷新令牌(ID Token为短期令牌,默认1小时自动失效,无法直接撤销;刷新令牌失效后无法获取新ID Token)
        auth.revoke_refresh_tokens(user_uid)
        # 可选:获取令牌撤销生效时间
        user = auth.get_user(user_uid)
        return f"Successfully revoked tokens for user: {user_uid}, revocation takes effect after: {user.tokens_valid_after_timestamp}"
    except Exception as e:
        abort(400, description=str(e))

def validate_auth(request):
    try:
        auth_header = request.headers.get('Authorization')
        if not auth_header or not auth_header.startswith('Bearer '):
            abort(401, description="Missing or invalid Authorization header")
        id_token = auth_header.split(' ')[1]
        decoded_token = auth.verify_id_token(id_token, check_revoked=True)
        return decoded_token['uid']
    except Exception as e:
        abort(400, description=str(e))

关键说明

  1. 端点区分:通过request.path判断请求目标,比如访问https://<你的函数域名>/validate触发验证逻辑,访问/revoke触发撤销逻辑。
  2. Token撤销逻辑:Firebase Auth没有直接撤销ID Token的API(ID Token默认1小时后自动失效),但auth.revoke_refresh_tokens(uid)会撤销用户所有刷新令牌,阻止用户获取新的ID Token;你原有的check_revoked=True会在验证时检查Token是否已被标记为撤销。
  3. 身份校验复用:两个端点共用validate_auth函数,确保只有合法用户才能触发操作,避免未授权的撤销请求。

部署与测试

部署函数后,可通过以下方式测试:

  • 验证端点:发送请求到https://REGION-PROJECT_ID.cloudfunctions.net/你的函数名/validate,携带Authorization: Bearer <你的ID Token>请求头。
  • 撤销端点:发送请求到https://REGION-PROJECT_ID.cloudfunctions.net/你的函数名/revoke,同样携带合法的ID Token请求头。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 07:37:48