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

问题描述 投票:0回答:1

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

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

access_token
id_token

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

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

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

amazon-web-services authentication oauth-2.0 openid
1个回答
8
投票

好问题:

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

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

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.