【问题标题】:Firebase, Auth0, React. The custom token format is incorrect. Please check the documentationFirebase,Auth0,反应。自定义令牌格式不正确。请检查文档
【发布时间】:2018-10-16 07:18:04
【问题描述】:

我正在尝试将 Auth0 JWT 令牌与 Firebase 一起使用,但运气不佳。

在 Firebase 中使用令牌时:

const token = localStorage.getItem('id_token'); //from auth0
firebase.auth().signInWithCustomToken(token).catch((error) => {
  var errorCode = error.code;
  var errorMessage = error.message;

  console.log(error);
  console.log(token);
});

我得到的是:

“The custom token format is incorrect. Please check the documentation.”

据我在 Firebase 的文档中看到的 Auth0 和 Firebase 令牌是不同的: https://firebase.google.com/docs/auth/admin/create-custom-tokens

显然,Firebase 需要一个 uid,而 Auth0 生成的 uid 中不存在该 uid 等效项在 sub 中。

我尝试创建一个规则来修改 Auth0 的令牌以包含一个名为 uid 的子副本,以查看这是否可以解决,但它不起作用,令牌正文中没有添加任何内容。

function (user, context, callback) {
context.idToken.uid = user.user_id;
callback(null, user, context);
}

有什么想法/建议吗?

PS:

1.我检查了 jwt.io 中的令牌及其有效。 2.我尝试将过期时间减少到不到 5 分钟,因为我看到一些人认为这是一个可能的解决方案,但事实并非如此。

【问题讨论】:

    标签: javascript reactjs firebase firebase-authentication auth0


    【解决方案1】:

    您不能将 Auth0 令牌直接用于 Firebase。您需要创建一个使用 firebase-admin SDK 的服务器端 API,以使用 Auth0 数据创建 Firebase 自定义令牌。

    OAuth 网站上有一个full tutorial。查看 API 路由 部分,了解如何在给定 OAuth 令牌的情况下使用 firebaseAdmin.auth().createCustomToken

    // Auth0 athentication middleware
      const jwtCheck = jwt({
        secret: jwks.expressJwtSecret({
          cache: true,
          rateLimit: true,
          jwksRequestsPerMinute: 5,
          jwksUri: `https://${config.AUTH0_DOMAIN}/.well-known/jwks.json`
        }),
        audience: config.AUTH0_API_AUDIENCE,
        issuer: `https://${config.AUTH0_DOMAIN}/`,
        algorithm: 'RS256'
      });
    
      // Initialize Firebase Admin with service account
      const serviceAccount = require(config.FIREBASE_KEY);
      firebaseAdmin.initializeApp({
        credential: firebaseAdmin.credential.cert(serviceAccount),
        databaseURL: config.FIREBASE_DB
      });
    
      // GET object containing Firebase custom token
      app.get('/auth/firebase', jwtCheck, (req, res) => {
        // Create UID from authenticated Auth0 user
        const uid = req.user.sub;
        // Mint token using Firebase Admin SDK
        firebaseAdmin.auth().createCustomToken(uid)
          .then(customToken => 
            // Response must be an object or Firebase errors
            res.json({firebaseToken: customToken})
          )
          .catch(err => 
            res.status(500).send({
              message: 'Something went wrong acquiring a Firebase token.',
              error: err
            })
          );
      });
    

    【讨论】:

      猜你喜欢
      • 2018-01-06
      • 2019-12-21
      • 1970-01-01
      • 2017-02-08
      • 2016-12-04
      • 2017-02-16
      • 1970-01-01
      • 2018-10-25
      • 2023-04-04
      相关资源
      最近更新 更多