【问题标题】:Why can't we use getUid() to authenticate with your backend server in firebase authentication为什么我们不能使用 getUid() 在 Firebase 身份验证中与您的后端服务器进行身份验证
【发布时间】:2019-07-18 10:25:49
【问题描述】:

在他们提到的这段代码 sn-p (firebase doc) 中,不要使用 user.getUid() 与您的后端服务器进行身份验证。请改用 FirebaseUser.getToken()。

FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
if (user != null) {
    // Name, email address, and profile photo Url
    String name = user.getDisplayName();
    String email = user.getEmail();
    Uri photoUrl = user.getPhotoUrl();

    // The user's ID, unique to the Firebase project. Do NOT use this value to
    // authenticate with your backend server, if you have one. Use
    // FirebaseUser.getToken() instead.
    String uid = user.getUid();
}


getUid()    A unique user ID, intended as the user's unique key across all providers.   
getToken()  The Firebase authentication token for this session.

我的要求是。

  1. 首先,我将使用 Firebase 身份验证方法(电子邮件和密码)注册用户。
  2. 我会保存 String uid = user.getUid();注册成功后在我自己的后端服务器中。
  3. 用户信用信息显示用户余额作为密钥 user.getUid() 保存在我自己的后端服务器中。
  4. 用户使用电子邮件和密码登录并询问余额。
  5. 我将从 firebase 获取 user.getUid() 并与我的记录匹配,如果找到的匹配将余额返回给用户。

他们说 getUid() 是唯一的用户 ID,但不要使用此值与您的后端服务器进行身份验证。

为什么会这样?为什么我们不能使用 getUid() 与您的后端服务器进行身份验证??

【问题讨论】:

  • 您找到问题的答案了吗?我正计划做同样的事情,我在我们的思考过程中没有发现问题

标签: firebase-authentication


【解决方案1】:

uid 是用户的唯一标识符。因此,虽然它会识别用户,但不会对其进行身份验证。

一个简单的推论是我的 Stack Overflow ID 是 209103。知道了这一点,你就可以认出我。但是要向 Stack Overflow 证明你是 Frank van Puffelen,需要你知道我的凭据。

用户的 ID 经常暴露在界面中。例如,如果您单击我的个人资料,您将看到我的 ID。这是识别我的必要条件。如果您也使用相同的 ID 进行身份验证,那么曾经看过您个人资料的每个人都可以在网站上冒充您。在安全方面不是一个好主意。

【讨论】:

  • 感谢您的回复,我理解您的意思。根据我的要求,我将使用 getUid() 来识别用户(在他们通过 firebase 系统进行身份验证之后)。第 4 点。一旦通过我的后端服务器验证用户信用信息,我将为这个经过身份验证的用户获取 getUid(),在我的数据库中针对这个 getUid() 搜索记录并呈现给他。我的问题是我在这个过程中是否有任何安全漏洞?
  • @Frank,其实我不太清楚“NewPostActivity”最终字符串 userId =getUid(): 中的 firebase 数据库示例中的 getuid() 评论。 getUid 怎么能在每次都是唯一的。
  • @user3559471 服务器无法信任该应用程序。服务器如何知道应用程序报告了正确的 uid?服务器可以使用令牌 id 来限制对应用程序完整性的信任。服务器在验证用户最近从 firebase 获取 uid 后,从令牌中获取 uid,而不是凭空获取。
  • 添加到@Frank 的回复,请查看firebase.google.com/docs/auth/admin/#id_token_verification Using ID Tokens 也符合 OpenID Connect 规范。
【解决方案2】:

以你的需求为例,如果你使用[GET] https://your-domain.com/api/users/$uid/balance来获取用户的数据,那么这个API根本不安全,任何人都可以通过随机的$uid获取其他用户的数据。

正如评论(firebase 文档)所建议的那样,FirebaseUser.getToken() 将获得 JWT 令牌,您应该在后端使用 firebase Admin SDK 验证令牌,这是您可以信任的数据。

现在客户端方法的方法应该更新为user.getIdToken()https://firebase.google.com/docs/auth/admin/verify-id-tokens 是更多详细信息的参考。

【讨论】:

    猜你喜欢
    • 2016-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2019-12-25
    • 2017-03-11
    • 2021-08-17
    相关资源
    最近更新 更多