Firebase:如何为CLI应用添加身份验证功能
针对C# CLI应用对接Firebase Auth的身份验证方案
核心原则:绝对不要在CLI中打包Admin SDK或密钥
Firebase Admin SDK是给服务器端服务用的,拥有高权限操作能力,一旦打包到CLI这类客户端应用中,很容易被反编译提取密钥,直接导致整个Firebase项目的安全风险。CLI属于客户端应用,必须走用户级授权流程,用用户身份令牌访问受保护API。
具体实现步骤
1. 配置Firebase客户端应用
- 登录Firebase控制台,为你的CLI创建一个新的**桌面应用(Desktop app)**类型的客户端ID,不要复用网站的客户端配置。
- 记录该客户端的
API_KEY、AUTH_DOMAIN等公开配置信息,这些可以安全嵌入CLI代码中(Firebase允许客户端持有这类公开配置)。
2. 在CLI中实现OAuth2授权流程(复用现有社交登录)
因为你的网站已经支持GitHub、Google登录,CLI可以直接复用这些身份提供商:
- 在CLI中启动一个本地HTTP服务器(比如监听
http://localhost:34567),作为OAuth2的回调地址,提前在Firebase控制台和对应身份提供商后台配置好这个回调地址。 - 调用系统API打开默认浏览器,跳转到Firebase Auth的授权URL,带上你的客户端ID、回调地址、所需权限(如
email、profile)。 - 用户在浏览器完成登录后,Firebase会将授权码通过回调地址发送到本地HTTP服务器,CLI捕获该授权码。
- 用授权码调用Firebase令牌交换API,换取
id_token(访问令牌,有效期1小时)和refresh_token(刷新令牌,长期有效)。
3. 安全存储与维护会话
- 将
id_token和refresh_token加密后存储到用户本地目录:Linux用~/.config/your-cli/,Windows用%APPDATA%/your-cli/,Mac用~/Library/Application Support/your-cli/,禁止明文存储。 - 每次调用云端API时,在请求头中携带
Authorization: Bearer {id_token},由API端验证令牌合法性。 - 当
id_token过期时,自动用refresh_token向Firebase请求新的id_token,无需用户重新登录。
4. API端的令牌验证
- 云端API继续使用Firebase Admin SDK,调用
VerifyIdToken方法验证CLI传来的id_token,确认用户身份和权限后再返回数据。
关键避坑点
- 永远不要把Firebase服务账号的密钥JSON文件打包到CLI中,这等同于泄露整个项目的控制权。
- 不要自行实现令牌验证逻辑,完全依赖Firebase官方SDK处理,避免出现安全漏洞。
- 本地存储令牌时必须加密,比如用C#的
ProtectedData类(Windows)或跨平台加密库,防止本地恶意程序窃取令牌。
内容的提问来源于stack exchange,提问作者MetaCoder
相关产品推荐
相关产品推荐

