【问题标题】:Server and client authentication: How can I create a Firebase Auth Token from server and send it to the web client?服务器和客户端身份验证:如何从服务器创建 Firebase 身份验证令牌并将其发送到 Web 客户端?
【发布时间】:2019-12-01 15:54:39
【问题描述】:

我正在尝试使用来自服务器的电子邮件和密码、使用 firebase 并将生成的令牌发送到客户端来验证我的用户。

在服务器端,我使用的是 nodejs firebase 函数,令牌是使用 firebase rest auth API 创建的,使用 verifyPassword 端点,然后我使用生成的令牌并将其发送给客户端。

我正在客户端中使用 firebase.auth().signInWithCustomToken(token) 尝试登录,但我收到了无效的令牌响应

我正在尝试做的是允许在双方、服务器和 WebClient 中对用户进行身份验证 .

这是可能的还是有更好的方法?

【问题讨论】:

    标签: firebase firebase-authentication google-cloud-functions


    【解决方案1】:

    您可以将您的客户端 idToken 发送到您的服务器,如 Firebase Auth Documentation 中所述,您可以在您的服务器上使用 firebase 管理员创建一个 Session-Cookie

    admin.auth().createSessionCookie(idToken, {expiresIn})
        .then((sessionCookie) => ...
    

    我有一个项目,当我的客户端的身份验证状态发生变化时,我将 idToken 发送到服务器:

    firebase.auth().onAuthStateChanged(function(user) {
          if (user) {
            // User is signed in.
            user.getIdToken().then(idToken => {
              sendTokenToServer(idToken,csrfToken);
            });
          } else {
            clearCookiesOnServer(...);
          }
        });
    

    【讨论】:

    • 谢谢,我要改变我的身份验证方法
    • @lombardo -- 在这里需要帮助。你如何使用 sendTokenToServer() 向服务器发送令牌?以及您从哪里获得 idToken 和 csrfToken。
    • 我正在使用 ajax 帖子向服务器发出请求以创建会话 cookie。 idToken 由 getIdToken 返回,然后作为请求的一部分发送;对于 csrfToken 我正在使用 csurf 包github.com/expressjs/csurf
    猜你喜欢
    • 2012-08-28
    • 2011-11-04
    • 1970-01-01
    • 2020-06-09
    • 2012-04-15
    • 1970-01-01
    • 2016-07-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多