我在我的 Firebase 应用中使用 Google API Gateway 来验证用户是否已登录。在此处的 API Gateway 文档中,建议使用转发的X-Apigateway-Api-Userinfo
标头来检索用户信息:
API Gateway 会将 X-Apigateway-Api-Userinfo 中的认证结果发送到后端 API。建议使用此标头而不是原始的 Authorization 标头。此标头采用 base64url 编码并包含 JWT 有效负载。
因为它是 base64url 编码的,所以我需要额外的服务器端逻辑来解码它,只是为了获取登录用户的信息(我假设解码的对象对应于 Firebase Auth Admin SDK 的DecodedIdToken))。
另一方面,我发现虽然 API Gateway 修改了原始Authorization
header,但它首先将其复制到另一个名为X-Forwarded-Authorization
. 这意味着我可以做类似的事情:
// authHeaders = 'Bearer ...'
const authHeaders = headers['X-Forwarded-Authorization'];
const token = authHeaders.split(' ')[1]
const decodedToken = await admin.auth().verifyIdToken(token)
我发现这是获取相同信息的一种更简单(并且记录更好)的方法。这是一个坏主意吗?我不确定是否有其他原因X-Apigateway-Api-Userinfo
建议使用标题。