如何在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))
关键说明
- 端点区分:通过
request.path判断请求目标,比如访问https://<你的函数域名>/validate触发验证逻辑,访问/revoke触发撤销逻辑。 - Token撤销逻辑:Firebase Auth没有直接撤销ID Token的API(ID Token默认1小时后自动失效),但
auth.revoke_refresh_tokens(uid)会撤销用户所有刷新令牌,阻止用户获取新的ID Token;你原有的check_revoked=True会在验证时检查Token是否已被标记为撤销。 - 身份校验复用:两个端点共用
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
相关产品推荐
相关产品推荐

