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

Android:我真的需要Firebase自定义身份验证吗?,android,firebase,firebase-security,firebase-authentication,firebase-realtime-database,Android,Firebase,Firebase Security,Firebase Authentication,Firebase Realtime Database,我正在开发一款具有聊天功能的应用程序。我将使用Firebase作为后端,我不知道我的应用程序是否需要自定义身份验证 当用户登录时,我所需要的只是用户名和电话号码。我用代码验证发送sms的电话号码,因此基本上我可以在验证phonenumber时将用户名和电话号码直接添加到json树(数据库)中 是否有任何理由需要使用JWT对用户进行身份验证?在验证号码后,我还会将用户名和电话号码存储在SharedPreference中。回答:是。我需要对我的应用程序进行自定义身份验证,因为每个人都可以进行反向工程

我正在开发一款具有
聊天功能的应用程序。我将使用
Firebase
作为后端,我不知道我的应用程序是否需要
自定义身份验证

当用户登录时,我所需要的只是
用户名
电话号码
。我用代码验证发送sms的电话号码,因此基本上我可以在验证phonenumber时将用户名和电话号码直接添加到json树(数据库)中


是否有任何理由需要使用JWT对用户进行身份验证?在验证号码后,我还会将用户名和电话号码存储在SharedPreference中。

回答:是。我需要对我的应用程序进行自定义身份验证,因为每个人都可以进行反向工程,查看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"
        }
      }
    }
  }
}  

这是否意味着任何知道用户电话号码的人都可以登录您的Firebase Instance?密码不应该是秘密的,而且很容易更改吗?@sfThomas每个用户都有一个电话号码,保存在本地的SharedReference中。如果电话号码经过验证,并且是从那部电话来的,他就可以访问数据库。如果不是,他将不会被重定向到可以访问数据库的活动。但是你说我应该只允许经过身份验证的用户访问数据库。在这种情况下,我认为我需要更改安全规则,以便只有经过身份验证的用户才能访问它。现在我刚刚读/写了真实的。我说的对吗?为了保护数据库,您肯定需要对用户进行身份验证。但是否需要自定义身份验证则是另一回事。例如:您可以将用户存储为
username@cristisdomain.com
(对域名进行硬编码),然后使用他们的电话号码作为密码。这样,您就可以使用电子邮件+密码进行身份验证。这就是说:制造自己的代币可能是最容易的。有足够的可用库,它可以让您完全控制安全规则的
auth
变量。@FrankvanPuffelen您使用电子邮件+密码的想法非常好,但我已经设法从文档中使用java库生成令牌,所以我将坚持使用它。我更新了安全规则,因此只有身份验证用户才能访问它。谢谢你的评论!是的,听起来不错。今天早上我只是在一个字面上的心情,而“我真的需要自定义身份验证吗?”的答案严格来说是“不,不需要”。您肯定有这样一种情况,即您应该并且可以轻松地使用自定义身份验证,但还有其他选项。:-)