我正在使用Firebase为我的Android应用程序创建一个非常简单的许可系统 系统的相关部分工作 - 有点简化 - 像这样;我正在生成一个唯一的密钥,将其存储在数据库中并将该密钥发送给购买该应用程序的用户。用户激活应用程序中的密钥,该密钥将设备ID和一些其他数据写入该许可证密钥。
但是,任何具有一点知识的人都可以很容易地进入数据库并修改数据,从而使任何许可证在他们的设备上有效!
现在我的(非常)科学研究观察(耶!) - 我已经阅读了Firebase令牌生成器。虽然文档说我不应该直接在应用程序代码中包含它(或我的Firebase秘密),但这看起来很有希望。这使得它成为一个糟糕的解决方案。
但是,我接着想到手动生成一个具有特定'uid'的auth-token,并将其作为常量存储在应用程序代码中,然后使用该令牌进行身份验证,每个应用程序都需要访问我的数据库(换句话说,我不会在应用程序代码中包含我的Firebase秘密)
然后,我将确定是否应该使用Firebase规则授予客户端访问数据库的权限,以检查客户端是否经过身份验证,以及是否具有正确的“uid”。
现在我的问题是;建立这样的系统是不好的做法,还是我可以将这个想法变为现实?
答案 0 :(得分:2)
如果您将此令牌存储在您的应用程序中,那么有人可以对您的APK进行反编译并获取令牌,从而使他们能够向您未经授权的数据库发出请求。
如果您只想确保只有注册客户端有权访问数据库,请考虑使用Firebase Anonymous Authentication,这样您就可以为每个设备生成唯一的会话令牌。
如果您不够灵活,可以在自己的服务器上生成令牌并使用Firebase Custom Authentication进行身份验证。这使您可以完全控制每个令牌的内容,而无需在APK中对令牌或秘密进行硬编码。