使用Lambda授权器的AWS Cognito和API网关

时间:2019-07-09 04:58:04

标签: amazon-web-services aws-lambda aws-api-gateway amazon-cognito

我正在尝试使用API​​网关和Lambda函数创建API。

基于用户组(不是Cognito用户组),我想提供对单独的DynamoDB表的访问。

我采用的方法是,我为每个用户组创建一个单独的Cognito用户池。

用户登录时,将使用适当的用户池进行身份验证。

对于调用后续API,我计划使用Lambda授权器。

用户将在HTTP标头请求中传递ID令牌,而我想验证此ID令牌。

这是正确的方法吗?或者,如果有更好的方法来实现此工作流程。

我们可以利用Cognito用户组吗,这将是一种安全的方法吗?

我想严格地将一个用户组的表与另一个用户组的表分开。

我通过以下链接验证了ID令牌。

https://github.com/awslabs/aws-support-tools/blob/master/Cognito/decode-verify-jwt/decode-verify-jwt.js

1 个答案:

答案 0 :(得分:1)

AWS提供了一些经过验证的架构和工具来简化上述用例。

在上述用例中,不需要多个用户池。可以使用单个用户池本身来处理。

一个简单的体系结构可以是UI-> API网关-> Lambda-> DynamoDB

可以将Cognito用户池中的用户添加到组中,并使用IAM策略进行设置。然后可以为IAM或认知授权者配置API网关。可以在API层上授权为访问不同DynamoDb表而编写的每个Lambda。

在这种情况下,不需要自定义授权者。

使用AWS Amplify进行用户身份验证和所有其他通信。 Amplify将使用任何额外编写的代码自行处理令牌传递部分。通过这种方法,可以在客户端UI层和服务器代码(lambda)中读取/验证JWT令牌并在逻辑上使用JWT令牌。默认情况下,API网关使用相同的令牌进行授权(不编写任何代码)。

Cognito用户池和身份池是企业级AWS解决方案,AWS Amplify补充了Sigv4,SRP等协议的高安全性实施,这些协议使用自定义代码很难实施且非常复杂。