如何在Vercel Edge Functions中验证Firebase Auth ID Token?
在Vercel Edge Functions中验证Firebase ID Token并获取用户信息
因为Vercel Edge Functions不兼容Firebase Admin SDK,我们可以用标准JWT工具库手动完成ID Token验证,下面是完整实现方案:
1. 选择适配的JWT库
推荐用jose——轻量、现代的JWT工具库,完美适配Edge环境,无兼容性问题。安装命令:
npm install jose
2. 核心验证逻辑
Firebase ID Token是标准JWT,验证需完成3件事:
- 从请求头提取Token(通常在
Authorization: Bearer <token>中) - 用Firebase公钥验证签名、Issuer、Audience等字段合法性
- 解码后直接从Payload中提取用户信息
3. 完整代码示例
import { jwtVerify, createRemoteJWKSet } from 'jose'; // 替换为你的Firebase项目ID,建议存到Vercel环境变量中 const FIREBASE_PROJECT_ID = process.env.FIREBASE_PROJECT_ID || 'your-project-id'; // 自动获取并缓存Firebase公钥集合 const jwks = createRemoteJWKSet( new URL('https://www.googleapis.com/robot/v1/metadata/x509/securetoken@system.gserviceaccount.com') ); export default async function handler(request: Request) { // 提取ID Token const authHeader = request.headers.get('Authorization'); if (!authHeader || !authHeader.startsWith('Bearer ')) { return new Response('Unauthorized', { status: 401 }); } const idToken = authHeader.split(' ')[1]; try { // 验证Token合法性 const { payload } = await jwtVerify(idToken, jwks, { issuer: `https://securetoken.google.com/${FIREBASE_PROJECT_ID}`, audience: FIREBASE_PROJECT_ID, }); // 提取用户核心信息 const userInfo = { uid: payload.sub, // Firebase的uid对应JWT的sub字段 email: payload.email, name: payload.name, emailVerified: payload.email_verified, // 自定义声明直接从Payload中提取(比如你设置的role字段) customClaims: { role: payload.role, // 其他自定义字段同理 } }; // 后续业务逻辑,示例:返回用户信息 return new Response(JSON.stringify(userInfo), { headers: { 'Content-Type': 'application/json' }, status: 200, }); } catch (err) { // Token验证失败(过期、签名无效、iss/aud不匹配等) return new Response('Invalid or expired token', { status: 401 }); } } // 指定运行时为Edge Functions export const config = { runtime: 'edge', };
关键注意事项
- 公钥缓存:
createRemoteJWKSet会自动缓存Firebase公钥,无需手动处理,大幅提升请求性能 - 环境变量:Firebase项目ID需存到Vercel环境变量中,避免硬编码泄露敏感信息
- 错误处理:所有验证失败场景(Token过期、签名错误等)都会抛出异常,直接返回401即可
- 自定义声明:通过Firebase Admin SDK或控制台设置的自定义声明,会直接出现在JWT Payload中,直接取值即可
内容的提问来源于stack exchange,提问作者GorvGoyl
相关产品推荐
相关产品推荐

