android - Firebase + 自定义后端:我应该在每次 http 请求之前在客户端上检索 jwt 令牌吗?
问题描述
我正在创建一个 Android 应用程序,我只想使用 Firebase 进行身份验证,其余部分使用我自己的后端。
我一直在关注这个Firebase 文档,在那里我发现了如何检索 jwt 令牌。我设法通过 POST 方法将令牌发送到我的 rest api,并使用 php JWT Firebase 库在那里验证它,现在我有点卡住了。
何时是检索令牌的正确时间?我是否:
- 在应用程序启动时检索令牌(或注册/登录等),将其存储在变量中,这样我就不必再次检索它,然后将令牌与每个 http 请求一起发送以授权用户。
- 检索一次令牌并将其存储在 SharedPreferences 中。
- 在每个 http 请求之前,我都会检索令牌,以便它是新鲜的,并且我可以确定它是有效的。
- 仅在应用程序启动时验证令牌,如果有效,则从客户端的令牌中提取用户 ID,将其存储在变量中,并在未来的 http 请求中使用该 ID 以了解发出请求的用户。
我最感兴趣的是使用第三个选项,但是检索令牌的代码很长,我可以想象我的代码会很快变得混乱。对我来说,第四个选项在纸上听起来也很棒,但我觉得在安全性方面这确实是个坏主意。
我害怕使用第一个和第二个选项,因为令牌到期时间。我可以找出令牌在后端无效,但是我必须通知客户端它是无效的,生成新的令牌然后再次发出请求,这对我来说似乎很复杂。
我应该遵循一些常见的做法吗?我的一个例子至少是对的还是我完全错了?
在我的新工作中,我在这个发展领域非常陌生,并且找不到太多关于在这种情况下我应该如何进行的信息。我将非常感谢任何答案!
解决方案
您应该在每次 HTTP 调用之前获取 ID 令牌,并将其包含在请求中。您不必每次都刷新 ID 令牌(即无需传递true
到getIdToken()
)。事实上,这可能会使应用程序变慢。
选项 1 和 2 难以正确实施,因为 ID 令牌每小时左右更改一次。选项 4 不安全。
推荐阅读
- android - RxJava 结合 Single 和 Completable
- asp.net - 图片上传 - 使用 CQRS 和 DDD 放置代码的位置
- asp.net-core - 如何在 Asp.Net Core 控制器中使用基于策略和基于角色?
- spring-boot - 用于获取访问令牌“重定向 uri”的 Onedrive OAuth 2.0 代码流未在指定的 url 列表中指定
- laravel - 作曲家:找不到 laravel 包照明/验证的满意版本
- nexus - 如何在 Nexus 存储库的托管组中删除 Dev 标记的 docker 图像
- html5-video - 视频事件问题:用户在播放前触摸屏幕
- php - 简码样式解析
- python - 在给定开始和停止数组的情况下生成范围
- spring-boot - 如何使用 @SpringBootApplication 注解自动检测 @ConfigurationProperties 标注的类