在 AWS Lambda 中使用 id_token 与 access_token 的最佳实践

Best practice for id_token vs. access_token use in AWS Lambda

考虑一个由 AWS-ApiGateway 和 -Lambda 组成的 restapi 后端。

oauth2 身份验证成功后,AWS Cognito returns access_tokenid_token 到代码授权授予流程中的客户端。

在 api 调用期间,lambda 函数需要知道经过身份验证的客户端的电子邮件地址,所以我基本上有 2 个选择:

  1. 发送 id_token 中的 Authorization header 由 ApiGateway 验证并传递给 Lambda。让 Lambda 解密 id_token 并访问其中包含的电子邮件地址。
  2. Authorization header 中发送 access_token 由 ApiGateway 使用 scope=openid email 验证并传递给拉姆达。让 Lambda 使用 Authorizationheader 中的 access_token/oauth2/userinfo 端点进行 GET 调用以获取电子邮件地址。

两者中哪一个是最佳做法?为什么?

好问题:

  • 访问令牌被设计为短期API凭证,包含范围/声明等
  • Id 令牌具有不同的作用,为客户端提供身份验证证明,如我的 blog post

但是,如果您使用的是 AWS Cognito,则存在无法自定义访问令牌的供应商限制 - 例如包含电子邮件地址。

因此,API 或网关通常会在首次收到令牌时做更多工作 - 例如,从其他来源查找用户信息或声明 - 然后缓存它们以供后续请求使用相同的访问令牌。

也就是说,首选选项 2,而不是以不自然的方式使用 id 标记。

有关此设计模式的更多信息,请参阅:

不确定您是否正在调查 API 网关自定义授权方,但如果是的话,我的博客上有一些关于此 here

的内容