【问题标题】:Android: Do I really need Firebase custom authentication?Android:我真的需要 Firebase 自定义身份验证吗?
【发布时间】:2016-05-19 08:51:41
【问题描述】:

我正在开发一个具有chat 功能的应用程序。我将使用Firebase 作为后端,我不知道我的应用程序中是否需要custom authentication

用户登录时我只需要UsernamePhonenumber。我用代码验证发送短信的电话号码,所以基本上我可以在验证电话号码时将用户名和电话号码直接添加到 json-tree(数据库)中。

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

【问题讨论】:

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

标签: android firebase firebase-security firebase-authentication firebase-realtime-database


【解决方案1】:

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

【讨论】:

  • 您肯定需要对用户进行身份验证以保护数据库。但是否需要 custom 身份验证是另一回事。例如:您可以将用户存储为username@cristisdomain.com(对域名进行硬编码),然后使用他们的电话号码作为密码。这样您就可以使用电子邮件+密码进行身份验证。也就是说:铸造自己的代币可能是最容易的。有足够的库可用,它使您可以完全控制您的安全规则的 auth 变量中的内容。
  • @FrankvanPuffelen 您使用电子邮件+密码的想法非常好,但我已经设法从文档中使用 java 库生成令牌,所以我会坚持下去。我更新了安全规则,因此只有身份验证用户才能访问它。感谢您的评论!
  • 是的,听起来不错。今天早上我只是在一个字面上的心情和“我真的需要自定义身份验证吗?”的答案。严格来说是“不,不需要”。您肯定有应该并且可以轻松使用自定义身份验证的情况,但还有其他选择。 :-)
猜你喜欢
  • 2020-04-01
  • 2022-12-10
  • 1970-01-01
  • 2019-08-06
  • 2014-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多