在Google App Engine上解码Firebase idToken

时间:2018-05-04 14:30:53

标签: google-app-engine firebase-authentication google-cloud-endpoints

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

通常情况下,Google建议通过代码中的代码验证HTTPS请求的传入ID令牌

  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令牌以检索他们的userID。我想知道Cloud Endpoints是否在这里处理身份验证。 我是否需要管理员SDK验证令牌?或者Google示例中的简单解码是否足够安全,因为云终端已经负责验证idToken?

1 个答案:

答案 0 :(得分:1)

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