google-cloud-firestore - 使用自定义身份验证 token 的 Firebase 登录不会在 1 小时后过期

标签 google-cloud-firestore firebase-authentication jwt firebase-security

我有一个 react 应用程序,我可以使用自定义 token 登录,如下所示:

  await firebase.auth().signInWithCustomToken(tokenResp.token);

根据 this ,firebase 自定义 jwt 的有效期为一小时。这正是我所期望的。

但是,当我在 1 小时后调用需要身份验证的集合(即通过 firestore 规则的 request.auth!=null)时,我可以访问它们。我预计 Firebase 实例会在这些调用一小时后(自动)失败。

那么为什么会发生这种情况以及如何解决它?

另请注意,我已登录用于身份验证的 jwt,通过查看 jwt 解码器中的 exp 字段,可以清楚地看出到期日期是一小时。

最佳答案

当文档指出自定义 token (在您的情况下为 tokenResp.token )有效期为一小时时,这意味着 signInWithCustomToken调用必须在 token 创建后一小时内发生。用户“登录”后(使用任何 signInXXX 方法),他们将获得访问 token 和刷新 token ,这些 token 可以无限期地使用,直到注销或撤销为止。

听起来您正在尝试使用安全规则来限制对过去一小时内登录的用户的访问。为此,请检查 auth.token.auth_time包含用户何时进行身份验证的字段(自纪元以来以秒为单位)。例如:request.time < timestamp.value(auth.token.auth_time * 1000) + duration.time(1, 'h')计算结果为 true如果请求时间在登录时间后一小时内。您可以使用它代替 request.auth!=null .

此外,您可以在一小时后在客户端自动注销用户,例如使用 JavaScript 计时器并检查 (await firebase.auth().currentUser.getIdToken()).auth_time以及。 (请注意,这仅仅改善了客户端的用户体验,并不能替代安全规则,因为客户端代码不能完全信任。)

关于google-cloud-firestore - 使用自定义身份验证 token 的 Firebase 登录不会在 1 小时后过期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72065123/

相关文章:

android - 在 Firestore 事务中更新同一文档的多个字段时的定价

ios - Swift - 应用程序在设置 UserDefaults 后崩溃

angularjs - 如何使用 Spring Security 4 + Spring Rest API 通过 Angular JS + JWT 身份验证开发 Remember Me 功能

node.js - 延长 Firebase OAuth2 访问 JWT token 中的到期时间和日期

arrays - 修复 fatal error : Index out of range in arrays

swift - 存储在 Firestore 中的系统日期对象的行为将发生变化,您的应用程序可能会崩溃?

java - 无法调用方法 FirebaseApp.delete()

firebase - 检测用户是否已通过其他提供商登录

android - 不同的权限 Firebase Auth

authentication - JWT 和 OAuth 身份验证之间的主要区别是什么?