我需要为我的Firebase应用程序实现单设备浮动许可证,因此用户一次只能在一个设备上登录该应用程序。因此,当用户从另一台设备登录时,该用户的其他现有登录名应无效。
这是我正在考虑的流程:
verifyIdToken()
并检索用户的refreshToken并将其存储revokeRefreshTokens()
这种方法的问题在于,当前,从Firebase Admin SDK中返回的DecodedIdToken对象verifyIdToken()
没有可用的refreshToken。并且revokeRefreshTokens()
不接受指定要为用户撤销的刷新令牌。默认情况下,它会为用户撤销所有刷新令牌。
还要注意的一点是,尽管refreshToken在User对象的客户端可用,但是我们不能将其直接发送到服务器端,因为可以在客户端操作它以从多个设备发送相同的refreshToken,这将失败。更好的方法是发送有效期有限的idToken。
那么,关于如何使用Firebase身份验证一次仅在单个设备中实现主动登录,还有其他选择/建议吗?
refreshToken
出于正确的原因,您无法从ID令牌获得ID。否则,如果从中检索到它,那就没有意义了idToken
。
使用来实现单个会话也很困难revokeRefreshTokens
,因为这将撤消所有现有会话,并且对于防止令牌被盗(而不是会话管理)更有用。
您可以执行以下操作。每次将ID令牌发送到您的服务器时,请auth_time
从解码的令牌中解析并跟踪该令牌(您将保存最新的令牌)。那是会话的认证时间。idTokens
从相同的所有生成refreshToken
将具有相同的auth_time
。您将始终跟踪最新消息,auth_time
并且只要您获得带有auth_time
更旧ID的ID令牌,就应考虑撤销该会话并阻止对该会话的访问。您可以返回一条错误消息,以强制signOut
发生这种情况。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句