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

ben*_*o_h 3 openid authentication amazon-web-services oauth-2.0

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

成功进行 oauth2 身份验证后,AWS Cognito在代码授权授予流程中向客户端返回 anaccess_token和 an 。id_token

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

  1. 发送由 ApiGateway 验证并传递给 Lambda 的标头id_tokenAuthorization让 Lambda 解密id_token并访问其中包含的电子邮件地址。
  2. 发送由 ApiGateway 验证并传递给 Lambda 的access_token标头。让 Lambda 使用头中的access_token 调用端点以获取电子邮件地址。Authorizationscope=openid emailGET/oauth2/userinfoAuthorization

两者哪一个是最佳实践?为什么?

Gar*_*her 9

好问题:

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

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

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

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

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