android - 手动生成单个 auth-token 以持续使用,以验证应用程序以访问数据库 - 好还是坏?

标签 android firebase firebase-authentication

我正在使用 Firebase 为我的 Android 应用程序创建一个非常简单的许可系统。
系统的相关部分工作——有点简化——像这样;我正在生成一个唯一 key ,将其存储在数据库中并将该 key 发送给购买该应用程序的用户。用户在应用程序中激活 key ,将设备 ID 和一些其他数据写入该许可 key 。

但是,任何有一点知识的人都可以很容易地进入数据库并修改数据,从而使任何许可证在他们的设备上有效!

现在开始我的(非常)科学研究观察(耶!)- 我已经阅读了有关 Firebase token 生成器的信息。一开始它看起来很有前途,尽管文档说我不应该将它(或我的 Firebase secret )直接包含在应用程序代码中,这使它成为一个糟糕的解决方案。
然而,我随后想到手动生成一个带有特定“uid”的单一授权 token ,并将其作为常量存储在应用程序代码中,然后在每个应用程序需要访问我的权限时使用该 token 进行身份验证数据库(换句话说,我不会在应用程序代码中包含我的 Firebase secret )。
然后,我会使用 Firebase 规则确定是否应授予客户端访问数据库的权限,以检查客户端是否经过身份验证,以及它是否具有正确的“uid”。

现在我的问题是;像这样构建系统是不好的做法,还是我可以将这个想法变成现实?

最佳答案

如果您将此 token 存储在您的应用程序中,那么其他人将很容易反编译您的 APK 并获取 token ,从而使他们能够向您的数据库发出未经您授权的请求。

如果您只想确保只有注册的客户端有权访问数据库,请考虑使用 Firebase Anonymous Authentication这将允许您为每台设备生成唯一的 session token 。

如果这对您来说不够灵活,您可以在自己的服务器上生成 token 并使用 Firebase Custom Authentication进行验证。这使您可以完全控制每个 token 的内容,而无需在 APK 中硬编码 token 或密码。

关于android - 手动生成单个 auth-token 以持续使用,以验证应用程序以访问数据库 - 好还是坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37419826/

相关文章:

java - Android Studio - (最终)函数参数

java - Jsoup 停止解析网页

android - Android平台交叉编译LKM模块

android - 如何在 Firebase 中连接经过身份验证的用户和数据库?

node.js - 如何在 NodeJS 中更新 Firebase 身份验证的电话号码?

Android Wear 资源限定符

ios - 如何在应用程序启动时阻止 Firebase 记录状态更新

android - 找不到 com.google.firebase :firebase-database:9. 2.0

php - Firebase 身份验证 JS/PHP

firebase - 在 Firebase 存储规则中使用用户声明