在 Google App Engine 上解码 Firebase idToken

decoding Firebase idToken on Google App Engine

我的 firebase 用户正在向我的 API 服务器发送请求。我正在使用 Google Cloud Endpoints 中的安全规则验证它们。我在 Google App Engine 上不使用管理 SDK 就提取了他们的用户 ID。

通常,Google 建议通过此代码验证 HTTPS 请求的传入 ID 令牌在他们的示例 Firebase Cloud Functions 代码:

  admin.auth().verifyIdToken(idToken).then((decodedIdToken) => {
    console.log('ID Token correctly decoded', decodedIdToken);
    req.user = decodedIdToken;
    return next();
  }).catch((error) => {
    console.error('Error while verifying Firebase ID token:', error);
    res.status(403).send('Unauthorized');
  });

但是,示例中 Google App Engine 代码、Google 在没有管理 SDK 的情况下解码令牌:

let authUser = { id: 'anonymous' };
const encodedInfo = req.get('X-Endpoint-API-UserInfo');
if (encodedInfo) {
  authUser = JSON.parse(Buffer.from(encodedInfo, 'base64'));
}

我正在使用 Google Cloud Endpoints 来保护我在 Google App Engine 上托管的 API。我在云端点上设置了安全性,只允许 firebase 用户访问路由,但是,我只希望用户访问他们自己的数据,所以我需要解码他们的 id 令牌以检索他们的用户 ID。我想知道 Cloud Endpoints 是否在这里处理身份验证。 我需要让admin SDK验证token吗?或者 Google 示例中的简单解码足够安全,因为云端点已经负责验证 idToken?

Admin SDK 正在执行 Endpoints 代理在验证令牌时所做的工作。代理只是传递经过验证的令牌。只要 Endpoints 代理保留在您的应用程序前面,您就可以解码 X-Endpoint-API-UserInfo 令牌。