首页 > 解决方案 > Firebase + 自定义后端:我应该在每次 http 请求之前在客户端上检索 jwt 令牌吗?

问题描述

我正在创建一个 Android 应用程序,我只想使用 Firebase 进行身份验证,其余部分使用我自己的后端。

我一直在关注这个Firebase 文档,在那里我发现了如何检索 jwt 令牌。我设法通过 POST 方法将令牌发送到我的 rest api,并使用 php JWT Firebase 库在那里验证它,现在我有点卡住了。

何时是检索令牌的正确时间?我是否:

  1. 在应用程序启动时检索令牌(或注册/登录等),将其存储在变量中,这样我就不必再次检索它,然后将令牌与每个 http 请求一起发送以授权用户。
  2. 检索一次令牌并将其存储在 SharedPreferences 中。
  3. 在每个 http 请求之前,我都会检索令牌,以便它是新鲜的,并且我可以确定它是有效的。
  4. 仅在应用程序启动时验证令牌,如果有效,则从客户端的令牌中提取用户 ID,将其存储在变量中,并在未来的 http 请求中使用该 ID 以了解发出请求的用户。

我最感兴趣的是使用第三个选项,但是检索令牌的代码很长,我可以想象我的代码会很快变得混乱。对我来说,第四个选项在纸上听起来也很棒,但我觉得在安全性方面这确实是个坏主意。

我害怕使用第一个和第二个选项,因为令牌到期时间。我可以找出令牌在后端无效,但是我必须通知客户端它是无效的,生成新的令牌然后再次发出请求,这对我来说似乎很复杂。

我应该遵循一些常见的做法吗?我的一个例子至少是对的还是我完全错了?

在我的新工作中,我在这个发展领域非常陌生,并且找不到太多关于在这种情况下我应该如何进行的信息。我将非常感谢任何答案!

标签: androidfirebasefirebase-authenticationjwtfirebase-admin

解决方案


您应该在每次 HTTP 调用之前获取 ID 令牌,并将其包含在请求中。您不必每次都刷新 ID 令牌(即无需传递truegetIdToken())。事实上,这可能会使应用程序变慢。

选项 1 和 2 难以正确实施,因为 ID 令牌每小时左右更改一次。选项 4 不安全。


推荐阅读