【问题标题】:Sign out user via REST HTTP API通过 REST HTTP API 注销用户
【发布时间】:2019-12-09 14:55:04
【问题描述】:

我可以使用 HTTP API 让用户登录到 Firebase:

如何退出用户,以使 Firebase idTokenrefreshToken 无法再使用?

另外,refreshToken 的有效期是多久?

如果我的用户数周未使用我的应用,我是否仍可使用 refreshToken 还是需要重新获得 Google 登录 idToken 并将其换成 Firebase(idTokenrefreshToken ) 通过/identitytoolkit/v3/relyingparty/verifyAssertion API 配对?

【问题讨论】:

    标签: firebase oauth firebase-authentication google-oauth


    【解决方案1】:

    我认为没有退出端点。您可以尝试重定向到 https://accounts.google.com/Logout,但我怀疑这会退出所有 Google 服务,这可能不是一个好主意。

    刷新令牌的全部意义在于,无论用户是否存在并登录,它们都可用于访问资源,因此您的评论“我如何注销用户,以便 Firebase idToken 和 refreshToken 不能再被使用”是矛盾的。

    理论上,刷新令牌在用户明确撤销之前是有效的,但您的应用应针对 Google 已使其过期的可能性进行编码。

    【讨论】:

    • 所以如果刷新令牌被泄露,我的应用程序不能过期以防止进一步使用?我将不得不依靠用户来使自己的令牌过期一些如何?例如,我希望我可以让用户“退出”并让他们的 id 和刷新令牌不再有效,所以如果它们在退出后被泄露,那也没问题。
    • @zino - 1) 您为什么或如何认为刷新令牌会受到损害?您的网络服务器(站点等)接收刷新令牌作为 OAuth 的一部分,而不是客户端。 2) 每个 OAuth 提供者都提供一个注销端点,您可以手动查找该端点,然后在您的网站上作为奖励功能提供。但是,这会使用户退出所有站点,而不仅仅是您的站点。
    • 代码在 React Native iOS 应用上运行。如何让用户登录似乎有点奇怪,但你不能让他们退出(使 idToken 和 refreshToken 失效以供将来调用)。
    • 刷新令牌是授予访问权限的用户的属性。该用户可以撤销令牌。如果您真的希望您的应用程序使 RT 无效,您可以请求大约 30 个新的 RT,这将导致最旧的 RT 过期。正如 John 所说,RT 应该安全地存储在服务器上,而不是分发给不安全的客户端。
    • 除了 Firestore REST API 之外没有服务器。所有代码都在客户端上:用户使用 Google 登录,结果为 idToken。我将idToken 传递给/identitytoolkit/v3/relyingparty/verifyAssertion 的Firebase Auth,响应是(idTokenrefreshToken)对。对于来自客户端的所有 Firestore REST API 请求,我在 Authorization : Bearer $idToken 标头中使用此 idToken。 Firestore DB 设计为直接从客户端使用 - 在这种情况下,如何防止客户端上有刷新/id 令牌?
    【解决方案2】:

    客户端无法通过 REST API 直接撤销 ID 令牌,但 Firebase Auth 客户端 SDK(例如:Android)和Auth Admin SDK 都支持它。因此,如果您的客户端平台不受支持,但您能够创建一个小型服务器实现(可能通过 Firebase/Cloud Functions),您可以创建一个触发 ID 令牌撤销的 HTTP 端点。

    【讨论】:

      猜你喜欢
      • 2018-03-23
      • 2019-12-10
      • 1970-01-01
      • 2019-06-05
      • 2015-06-28
      • 2010-12-26
      • 1970-01-01
      • 2020-03-19
      • 1970-01-01
      相关资源
      最近更新 更多