You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Firebase Auth自定义令牌管控90天最长会话时长?

解决方案与优化思路

一、直接用Firebase Auth自带的会话过期设置(最省心)

没必要自己折腾令牌管理,Firebase Auth本身就支持强制会话90天后失效:

  • 打开Firebase控制台,进入Authentication > 设置 > 会话管理,把"会话过期"改成"90天后"。这样用户的刷新令牌会在90天后自动作废,没法再兑换新的ID令牌,客户端会自动触发认证失效,也就访问不了Firestore了。
  • 客户端正常走Firebase Auth的自定义令牌登录流程就行,SDK会自动续期ID令牌,直到刷新令牌过期,全程不用自己写额外逻辑。

二、非要自己管ID令牌?用Firestore REST API绕开SDK限制

如果坚持要自己控制ID令牌,官方SDK确实不支持直接附加,但可以直接调用Firestore的REST接口:

  • 客户端不用Firestore SDK,直接发HTTP请求,在请求头里加Authorization: Bearer <你的ID令牌>即可。
  • 举个Android的例子(Kotlin):
val client = OkHttpClient()
val request = Request.Builder()
    .url("https://firestore.googleapis.com/v1/projects/你的项目ID/databases/(default)/documents/你的集合路径")
    .addHeader("Authorization", "Bearer $yourIdToken")
    .build()
val response = client.newCall(request).execute()
  • 这种方式需要自己处理数据序列化、离线缓存这些SDK本来就有的功能,开发成本会高不少,除非有特殊需求,不然不推荐。

三、修正你之前的自定义令牌方案

你之前用自定义令牌拿到永不过期的刷新令牌,是因为没做限制。可以这么改:

  • 后端用Firebase Admin SDK生成自定义令牌时,给sessionClaims加个过期时间:
const customToken = admin.auth().createCustomToken(uid, {
  expiresAt: Date.now() + 90 * 24 * 60 * 60 * 1000 // 90天后过期
});
  • 然后在Firebase Auth的自定义令牌验证逻辑里,检查这个expiresAt字段,过期的直接拒绝兑换ID令牌。
  • 同时配合控制台的90天会话过期设置,双重保险,确保刷新令牌到点就失效。

安全提醒

  • 不管用哪种方案,绝对不能把刷新令牌返回给客户端,不然等于给了用户长期访问权限。
  • 自己管令牌的话,一定要严格验证ID令牌的签名和有效期,别让伪造或者过期的令牌被滥用。

内容的提问来源于stack exchange,提问作者Julien Fouilhé

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 19:30:53