基于Firebase Cloud Function的API认证:API Key与OAuth获取请求uid
基于Firebase Cloud Function的Express API认证与UID获取方案
一、API Key 认证流程实现
如果用API Key做认证,核心是绑定API Key与用户UID:
- 生成API Key:在后端(Cloud Function)提供生成接口,用户通过已认证方式(比如Firebase Auth登录)请求生成,后端将API Key(建议用UUID或安全哈希值)与用户UID关联存储到Firebase Firestore/Realtime Database。
- 请求校验:前端每次调用API时,在请求头(如
X-API-Key)携带API Key,后端取出后查询数据库,匹配到对应UID即可用于后续业务。
更推荐结合Firebase Token优化流程:
不用自行维护哈希令牌存储,而是在生成API Key的同时,调用admin.auth().createCustomToken(uid)生成Firebase自定义令牌返回给前端。前端拿到后通过firebase.auth().signInWithCustomToken(customToken)获取ID Token,后续请求API时携带该ID Token。后端调用admin.auth().verifyIdToken(idToken)验证,直接解析出UID——Firebase会自动处理令牌过期、刷新逻辑,比自行维护API Key更安全可靠。
二、OAuth 2.0 授权码流程实现
如果对接第三方OAuth(如Google、GitHub),可直接借助Firebase Auth的OAuth集成:
- 前端引导用户完成第三方授权流程,获取授权码后传给后端Cloud Function。
- 后端用授权码调用Firebase Auth接口交换ID Token和刷新Token。
- 后端通过
admin.auth().verifyIdToken(idToken)验证并提取UID。
如果是自定义OAuth授权服务器,在验证授权码并确认用户身份后,同样可以调用createCustomToken生成Firebase令牌,后续统一用ID Token做接口校验。
三、Firebase Token 结合的必要性
完全有必要结合,原因如下:
- 省去自行实现令牌过期、刷新、存储校验的重复工作,Firebase Auth已提供成熟的安全机制。
- ID Token为JWT格式,自带签名,后端验证无需查询数据库(除非需额外用户信息),性能更优。
- 自定义令牌可关联已存在的Firebase用户UID,统一用户身份体系,方便后续对接Firestore规则、Storage权限等其他服务。
四、更优的UID获取方式
除上述流程外,还有两种更直接的方式:
- 直接验证ID Token:无论哪种认证流程,最终转化为前端携带ID Token请求,后端调用
admin.auth().verifyIdToken(idToken)解析出uid字段,这是最推荐的方式,安全且高效。 - Cloud Function 上下文获取:如果Express API通过Firebase Cloud Function的HTTPS触发器部署,且用户通过Firebase Auth登录后调用API,可通过
req.user.uid直接获取UID(需在Cloud Function中启用身份验证中间件)。
内容的提问来源于stack exchange,提问作者Z2Hero
相关产品推荐
相关产品推荐

