【问题标题】:Optional authorization for API GatewayAPI 网关的可选授权
【发布时间】:2020-04-28 09:55:00
【问题描述】:
我正在构建一个由 lambda 通过 API Gateway 提供服务的 API。我已经为一些管理端点集成了 Cognito 用户池授权程序,它阻止了非授权请求,但现在我想添加一些可以由经过身份验证和未经身份验证的用户调用的端点(并根据授权返回不同的数据)。例如,您可以想象GET /users 只会在请求未通过身份验证时返回用户的基本配置文件信息,如果是,则返回更多详细信息。
使用 API Gateway 进行设置的最佳方式是什么?
【问题讨论】:
标签:
security
aws-lambda
aws-api-gateway
amazon-cognito
【解决方案1】:
选项 #1(首选)
请有 2 个不同的端点
带有 GET https://api.xyz.com/users 的 API X(Lambda 用户作为后端,Cognito 作为授权者)
带有 GET https://api.xyz.com/public/users 的 API Y(Lambda 用户作为后端,没有 Cognito)
Lambda 用户需要验证以查看应根据标头“授权”返回什么响应。如果“授权”,则返回更多详细信息,否则,返回最少详细信息。
选项 #2
请有 1 个端点
带有 GET https://api.xyz.com/users 的 API X(Lambda 用户作为没有 Cognito 的后端)
Lambda 用户需要验证以查看应根据标头“授权”返回什么响应。如果“授权”,则返回更多详细信息,否则,返回最少详细信息。
我更喜欢第一个的原因是,从长远来看,我们可以在我们的系统中单独拥有一组公共 API。这对所有消费者来说也很清楚。易于开发和维护。
【解决方案2】:
使用 Cognito 时,您有以下可能的选项
1) Cognito 授权
2) Lambda 授权:
使用 Lambda Function 的好处是可以进行除了验证 IdToken 之外的授权处理。比如你可以根据你的应用编写处理,比如IP限制和只允许特定的用户代理。
3) 在您的代码中编写过滤器以拦截每个请求和响应,并根据需要管理您自己的基于角色的授权和返回响应。