我正在通过API网关构建由lambda服务的API。我已经为某些管理端点集成了Cognito用户池授权器,该管理器阻止了未经授权的请求,但是现在我想添加一些可由身份验证和未经身份验证的用户调用的端点(并根据授权返回不同的数据)。例如,您可以想象GET /users
仅在请求未通过身份验证时返回用户的基本个人资料信息,而在请求未通过身份验证时返回更多详细信息。
使用API网关进行设置的最佳方法是什么?
答案 0 :(得分:1)
请设置2个不同的端点
具有GET https://api.xyz.com/users的API X(Lambda用户作为后端,Cognito作为授权者)
具有GET https://api.xyz.com/public/users的API Y(Lambda用户作为后端,并且没有Cognito)
Lambda用户需要验证以查看基于标题“授权”应返回的响应。如果为“已授权”,则返回更多详细信息,否则,返回最少详细信息。
请设置1个端点
具有GET https://api.xyz.com/users的API X(Lambda用户作为没有Cognito的后端)
Lambda用户需要验证以查看基于标题“授权”应返回的响应。如果为“已授权”,则返回更多详细信息,否则,返回最少详细信息。
之所以我选择第一个是因为从长远来看,我们可以在整个系统中分别拥有一组公共API。对于所有消费者来说也很清楚。易于开发和维护。
答案 1 :(得分:0)
使用Cognito时,您可以使用以下选项
1)Cognito授权
2)Lambda授权: 使用Lambda函数的优势在于,它可以执行除IdToken验证以外的授权处理。例如,您可以根据应用程序编写处理,例如IP限制和仅允许特定的用户代理。
3)在您的代码中,编写过滤器以拦截每个请求和响应,并管理您自己基于角色的授权并根据需要返回响应。