我正在使用 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/