【问题标题】:Firebase Admin: Is it necessary to check if uid decoded on the server (based on client ID token) matches the uid from the client?Firebase 管理员:是否有必要检查服务器上解码的 uid(基于客户端 ID 令牌)是否与客户端的 uid 匹配?
【发布时间】:2020-02-01 04:16:39
【问题描述】:

在我的服务器中,我通过将 Firebase uid 作为参数(即GET /users/:uid)传递来访问用户特定的数据。我还从 Firebase 客户端生成了一个 ID 令牌,并在服务器上解码该令牌以获得 uid。然后我检查这两个uids 是否相同。

根据 Firebase 处理令牌的方式,这是否必要?或者 Firebase 能否有效地确定请求的 uid 参数(使用 Auth.auth().getUserId 生成)和令牌(使用 Auth.auth().generateIdToken() 生成)不是来自同一个用户?

注意:我没有使用 Firebase 数据库,因此我没有来自数据库权限的额外安全性。

【问题讨论】:

  • 如果不更明确地查看您的代码,很难知道该告诉您什么。您能否尝试在此问题中添加一个最小的代码示例,以显示您当前正在做什么以及您需要了解的内容?

标签: node.js firebase express firebase-authentication firebase-admin


【解决方案1】:

Firebase 管理员文档推荐使用以下方法来验证服务器上当前登录的用户。

如果您的 Firebase 客户端应用与自定义后端服务器通信,您可能需要识别该服务器上当前登录的用户。要安全地执行此操作,请在成功登录后使用 HTTPS 将用户的 ID 令牌发送到您的服务器。然后,在服务器上验证 ID 令牌的完整性和真实性,并从中检索uid。您可以使用以这种方式传输的uid 来安全地识别您服务器上当前登录的用户。

因此,您只需要在客户端获取用户的 ID 令牌并使用HTTPS 将其发送到服务器即可。这足以安全地验证用户的身份。

服务器代码 (node.js)

// idToken comes from the client app
admin.auth().verifyIdToken(idToken)
  .then(function(decodedToken) {
    let uid = decodedToken.uid;
    // ...
  }).catch(function(error) {
    // Handle error
  });

请参阅 Firebase 管理员文档:Verify ID Tokens

【讨论】:

    猜你喜欢
    • 2018-09-11
    • 2017-04-30
    • 1970-01-01
    • 1970-01-01
    • 2013-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-28
    相关资源
    最近更新 更多