安卓:我真的需要Firebase自定义身份验证吗?

4
我正在开发一个带有聊天功能的应用程序。我将使用Firebase作为后端,但我不知道是否需要在我的应用程序中使用自定义身份验证。
用户登录时,我所需获取的信息只有用户名电话号码。我通过发送短信验证码来验证电话号码,因此当电话号码验证完成后,我可以直接将用户名和电话号码添加到json树(数据库)中。 那么,我是否需要使用JWT对用户进行身份验证呢? 在验证号码后,我还将用户名和电话号码存储在SharedPrefrence中。

这是否意味着任何知道用户电话号码的人都可以登录您的Firebase实例? 密码不应该是秘密和易于更改的吗? - sfThomas
@sfThomas 每个用户都有一个电话号码,本地保存在sharedPreference中。如果该号码已验证并且来自该手机,则可以访问数据库。否则,他将无法重定向到可以访问数据库的活动。但是您说我应该只允许经过身份验证的用户访问数据库。在这种情况下,我认为我需要更改安全规则,以便只有经过身份验证的用户才能访问它。现在我只有读/写true。我是对的吗? - Chris
1个回答

3

答案: 需要。我需要为我的应用程序定制认证,因为任何人都可以进行逆向工程并查看API URL,并使用这些默认规则访问它:

{
"rules": {
    ".read": true,
    ".write": true
    }
}

如果我使用从秘钥、uid和其他数据生成的令牌(JWT)来验证我的用户,而这些令牌是在一个可信赖的服务器上生成的(不要将秘钥存储在应用程序代码中),那么该服务器将不会对所有人开放。当然,我还需要更改安全规则,以便只有经过身份验证的用户才能访问它:

{
  "rules": {
    "data": {
      "users": {
        "$user_id": {
          // grants write/read access to the owner of this user account
          // whose uid must exactly match the key ($user_id)
          ".write": "$user_id === auth.uid",
          ".read": "$user_id === auth.uid"
        }
      }
    }
  }
}  

1
为了保护数据库,您绝对需要对用户进行身份验证。但是是否需要定制身份验证是另一回事。例如:您可以将用户存储为 username@cristisdomain.com(因此硬编码域名),然后使用他们的电话号码作为密码。这样,您就可以使用电子邮件+密码进行身份验证。话虽如此:最简单的方法可能是创建自己的令牌。有足够的库可用,并且它使您完全控制安全规则中“auth”变量中的内容。 - Frank van Puffelen
@FrankvanPuffelen 你的邮箱加密码的想法真的很好,但我已经成功使用文档中的Java库生成了令牌,所以我将坚持使用它。我更新了安全规则,只有经过身份验证的用户才能访问它。感谢你的评论! - Chris
好的,听起来不错。今天早上我只是有点字面意思,对于“我真的需要自定义身份验证吗?”的答案严格来说是“不需要”。你肯定有一个情况,可以并且很容易使用自定义身份验证,但还有其他选择。 :-) - Frank van Puffelen

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接