Firebase阻塞函数请求验证:如何确认请求来自Firebase
先纠正一个误解
Firebase Auth的阻塞函数(比如beforeCreate、beforeSignIn这类)根本不需要你手动创建开放的公共HTTP云函数。这些是Firebase官方提供的专用触发器,由Firebase Auth服务直接内部调用你的云函数,全程不需要暴露公共端点——默认就是安全的,只有Firebase内部服务能触发,外部攻击者碰不到。
如果你真的需要验证请求来源(比如自定义HTTP端点对接场景)
要是你自己搭了HTTP函数来处理类似Auth逻辑,必须确认请求来自Firebase,按这几步来:
验证请求签名:Firebase发送的请求会带
X-Firebase-Event-Type、X-Firebase-Delivery-ID等头部,核心是验证Bearer令牌:- 从请求头的
Authorization字段里提取Bearer令牌 - 调用Google的令牌验证服务,检查令牌的受众(audience)是否是你的云函数项目ID,签发方(issuer)是否为
https://accounts.google.com - 验证通过后再处理请求
- 从请求头的
用Firebase Admin SDK做验证:在云函数里,用
firebase-admin库的admin.auth().verifyIdToken(idToken)方法可以验证用户端的ID令牌,但如果是Firebase服务端发来的请求,还是用上面的签名验证更准确。锁死云函数的IAM权限:去Google Cloud Console给你的云函数设置IAM权限,只允许
firebaseauthsystem.gserviceaccount.com这个官方服务账号调用,这样除了Firebase Auth服务,谁都触发不了。
最后再明确下
用官方的Auth阻塞触发器的话,完全不用瞎担心外部攻击,触发逻辑是Firebase内部管控的,没机会暴露给外人。只有自定义HTTP函数对接的时候,才需要做上面的验证步骤。
内容的提问来源于stack exchange,提问作者Nickname0222022022

