【发布时间】:2018-11-10 15:12:00
【问题描述】:
在我的客户端上将 OAuth 与 Github 结合使用,我向我的服务器发送带有生成令牌的获取请求。我按预期获取令牌,但无法执行 firebase.auth().verifyIdToken 来获取令牌。我的 SDK 使用 admin SDK setup 之后的证书凭据进行身份验证。
我的 clientAuth 中间件:
const firebase = require('firebase-admin');
const db = require('../db');
module.exports = async (req, res, next) => {
try {
const tokenId = req.get('Authorization').split('Bearer ')[1];
console.log(tokenId) //yay, token
const validToken = await firebase.auth().verifyIdToken(tokenId);
console.log(validToken.uid) //error
return (validToken && validTeam) ? next() : res.status(401).end();
} catch (e) {
res.status(401).end();
}
};
我得到的错误是“解码 Firebase ID 令牌失败。确保您传递了代表 ID 令牌的整个字符串 JWT。如何验证/解码此令牌?
【问题讨论】:
-
由于 JWT 是透明的,您能否确保从
console.log(tokenId)获得的内容是有效的 JWT?您可以使用像 jwt.io 这样的工具来帮助解决这个问题。如果是有效的 JWT,aud声明是否与证书凭证 json 文件中的project-id匹配? -
不,它不是 JWT。所以我想我不能使用 .verifyIdToken(),但是我到底要如何验证这个东西呢?
-
我怀疑传递给服务器的令牌是 Github 令牌,而不是 Firebase 令牌。您是否在前端使用此方法获取令牌? firebase.google.com/docs/reference/js/firebase.User#getIdToken本指南也可能有帮助:firebase.google.com/docs/auth/web/github-auth
标签: firebase firebase-authentication