如何使用Firebase身份验证在服务器端检索刷新令牌?

Web开发

我需要为我的Firebase应用程序实现单设备浮动许可证,因此用户一次只能在一个设备上登录该应用程序。因此,当用户从另一台设备登录时,该用户的其他现有登录名应无效。

这是我正在考虑的流程:

  1. 登录后,从客户端发送Firebase idToken以在服务器上进行验证,然后再允许访问
  2. 在服务器端,使用verifyIdToken()并检索用户refreshToken并将其存储
  3. 如果refreshToken已从用户先前存储的值更改,请使用来使其他刷新令牌无效revokeRefreshTokens()

这种方法的问题在于,当前,Firebase Admin SDK中返回DecodedIdToken对象verifyIdToken()没有可用refreshToken并且revokeRefreshTokens()不接受指定要为用户撤销的刷新令牌。默认情况下,它会为用户撤销所有刷新令牌。

还要注意的一点是,尽管refreshTokenUser对象的客户端可用,但是我们不能将其直接发送到服务器端,因为可以在客户端操作它以从多个设备发送相同的refreshToken,这将失败。更好的方法是发送有效期有限idToken

那么,关于如何使用Firebase身份验证一次仅在单个设备中实现主动登录,还有其他选择/建议吗?

博耶尔

refreshToken出于正确的原因,您无法从ID令牌获得ID。否则,如果从中检索到它,那就没有意义了idToken

使用来实现单个会话也很困难revokeRefreshTokens,因为这将撤消所有现有会话,并且对于防止令牌被盗(而不是会话管理)更有用。

您可以执行以下操作。每次将ID令牌发送到您的服务器时,请auth_time从解码的令牌中解析并跟踪该令牌(您将保存最新的令牌)。那是会话的认证时间。idTokens从相同的所有生成refreshToken将具有相同的auth_time您将始终跟踪最新消息,auth_time并且只要您获得带有auth_time更旧ID的ID令牌,就应考虑撤销该会话并阻止对该会话的访问。您可以返回一条错误消息,以强制signOut发生这种情况。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在节点JS的服务器端验证Google身份验证令牌?

LinkedIn验证用户身份验证令牌服务器端

如何使用离子云Auth检查经过身份验证的状态服务器端

获取 MVC 无需身份验证即可在服务器端检索操作结果

如何使用服务器端身份验证在其他页面上使用新的访问令牌 - PODIO API

使用Firebase机密使用HTTP POST请求对Firebase服务器端进行身份验证

Firebase对用户进行身份验证后,如何从服务器端重定向浏览器

Google API 身份验证服务器端

有关使用Facebook隐式令牌进行服务器端资源服务器OAuth2身份验证的安全问题

在服务器端进行 flutter firebase 身份验证

服务器端Firebase + PHP中的电话身份验证

如何以非交互方式从node.js服务器端使用azure AD身份验证

使用表单身份验证时如何在服务器端获取当前用户域?

如何在服务器端的Excel中实现“组织帐户”身份验证?

无需用户登录的 Google 身份验证,仅供服务器端使用

使用React Router的服务器端身份验证流程

如何调和Firebase Auth令牌与服务器端渲染的刷新

我应该在哪里在服务器端存储jwt令牌进行身份验证

如何验证 Facebook 用户令牌服务器端

使用Apple登录:在服务器端验证令牌

如何验证Google身份服务器端

服务器和客户端身份验证:如何从服务器创建Firebase身份验证令牌并将其发送到Web客户端?

将外部身份提供程序与服务器端身份验证一起使用

由于缺少“private_key”,firebase 管理员身份验证在服务器端失败

如何将 Firebase 身份验证令牌发送到后端服务器?

Firebase身份验证令牌如何发送到外部服务器?

Facebook身份验证:服务器端与客户端。Python / Django

如何在blazor Webassembly项目的服务器端控制器中对用户进行身份验证?

如何在 blazor 服务器端应用程序中扩展身份验证过程?