Jas*_*son 2 http-headers node.js firebase firebase-authentication google-api-gateway
我在我的 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标头,但它首先将其复制到另一个名为X-Forwarded-Authorization. 这意味着我可以做类似的事情:
// authHeaders = 'Bearer ...'
const authHeaders = headers['X-Forwarded-Authorization'];
const token = authHeaders.split(' ')[1]
const decodedToken = await admin.auth().verifyIdToken(token)
Run Code Online (Sandbox Code Playgroud)
我发现这是获取相同信息的更简单(并且有更好记录)的方法。这是一个坏主意吗?我不确定是否还有其他原因X-Apigateway-Api-Userinfo推荐使用标题。
小智 6
API 网关标头的X-Apigateway-Api-Userinfo工作方式与 Cloud Endpoints 相同X-Endpoint-API-UserInfo,后者为您验证 JWT 签名并仅存储您可以信任的 JWT 负载。
如果您想再次或自己进行身份验证,您可以读取X-Forwaded-Authorization并最终解码为 JWT 有效负载。仅当您想要使用绕过这些 API 网关服务的伪造来仔细检查对 HTTP 标头函数的请求时,这才有意义X-Apigateway-Api-Userinfo。您可以使用 IAM 来保护您的功能。
总而言之,
X-Apigateway-Api-Userinfo参考:
指定 x-google-backend 时,ESPv2 不转发原始授权标头