为什么我们不能在 Firebase 身份验证中使用 getUid() 向您的后端服务器进行身份验证



在此代码段(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. 我将保存字符串uid = user.getUid();一旦注册成功,我自己的后端服务器。
  3. 用户信用信息说用户余额保存在我自己的后端服务器中,为键user.getuid()。
  4. 用户登录电子邮件和密码并要求其余额。
  5. 我将从firebase获取user.getuid(),并与我的记录匹配,如果找到匹配的返回余额向用户。

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

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

UID是用户的唯一标识符。因此,虽然标识用户,但没有对其进行身份验证。

一个简单的推论是我的堆栈溢出ID是209103。知道,您可以识别我。但是,要证明您是弗兰克·范·普菲伦(Frank Van Puffelen),要求您知道我的凭据。

用户的ID经常在接口中公开。例如,如果您单击我的个人资料,您将看到我的ID。这对于确定我是必要的。如果您还将使用相同的ID进行身份验证,那么曾经看过您的个人资料的每个人都可以在网站上模仿您。在安全方面不是一个好主意。

以您的要求为例,如果您使用[GET] https://your-domain.com/api/users/$uid/balance检索用户的数据,那么此API根本无法确保,任何人都可以使用随机$ UID获取其他用户的数据。p>正如评论(Firebase Doc)建议的那样,FirebaseUser.getToken()将获得JWT令牌,您应该在后端中使用Firebase Admin SDK验证令牌,这就是您可以信任的数据。

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

相关内容

最新更新