authentication - 如何将 Firebase Auth Token 从客户端传递到服务器?

标签 authentication firebase firebase-authentication

我正在处理的网站使用 Firebase 身份验证,并且登录的不同用户对于他们可以访问哪些页面具有不同的权限。

登录方式设置类似于这个post :

  • 用户使用两个参数登录 - “id”和“email”
  • 服务器使用这些来创建自定义“uid”,然后使用 Firebase Admin SDK 创建自定义 token ,然后发送回客户端。
  • 客户端使用 Javascript Firebase SDK 登录 - firebase.auth().signInWithCustomToken()
  • 现在用户已登录,他们可以点击不同的页面 - 即 '/foo'、'/bar'

  • 我遇到的问题是,当他们访问新页面时,我试图将 token 从客户端传递回服务器(几乎与它在 Firebase Doc 中的完成方式相同),验证 token 并检查是否它有权查看网页。

    我试图找出最好的(和最安全的)方法来做到这一点。我考虑过以下选项:
  • 使用 token 构造一个 URL,但我听说这不是一个好习惯,因为 token 被暴露并且 session 劫持变得容易得多。

  • 我一直在尝试在请求 header 中传递 token ,但据我了解,当用户单击指向不同页面的链接(或者如果它在 javascript 中重定向)时,您无法添加 header 。同样的问题也适用于使用 POST。

    当用户单击指向不同页面的链接时,我该怎么做才能安全地将这些信息传递给服务器并检查权限?

    最佳答案

    您可以通过以下方式在客户端获取 accessToken (idToken):

    var accessToken = null;
    
    firebase.auth().currentUser
        .getIdToken()
        .then(function (token) {
            accessToken = token;
        });
    

    并将其传递到您的请求 header 中:
    request.headers['Authorization'] = 'Bearer ' + accessToken;
    

    并在您的服务器端使用您喜欢的方法获取 token 并使用 Firebase Admin SDK 对请求进行身份验证,例如(Node.js):
    firebaseAdmin.auth()
        .verifyIdToken(accessToken)
        .then(decodedIdToken => {
            return firebaseAdmin.auth().getUser(decodedIdToken.uid);
        })
        .then(user => {
            // Do whatever you want with the user.
        });
    

    关于authentication - 如何将 Firebase Auth Token 从客户端传递到服务器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43195612/

    相关文章:

    Firebase 管理 SDK : Verifying ID tokens from the REST API

    php - 如何使用所有登录表单登录我网站的所有部分?

    node.js - 将身份验证提供程序添加到 Azure 移动服务 Nodejs 后端

    asp.net - 为图像请求执行的 Application_AuthenticateRequest

    javascript - 在 Web 上的 Firebase 中将电话号码与 Facebook 和 Gmail 帐户相关联

    javascript - Firebase 在发送验证电子邮件之前发布成功注册重定向

    firebase - firebase 是第一次检查用户吗

    javascript - 如何在第一个请求(Windows 身份验证)中触发带有授权 header 的 AJAX 帖子?

    javascript - Electron:Firebase 和 Facebook 身份验证?

    android - 使用 firebase 出现内存不足错误