我正在尝试使用API网关和Lambda函数创建API。
基于用户组(不是Cognito用户组),我想提供对单独的DynamoDB表的访问。
我采用的方法是,我为每个用户组创建一个单独的Cognito用户池。
用户登录时,将使用适当的用户池进行身份验证。
对于调用后续API,我计划使用Lambda授权器。
用户将在HTTP标头请求中传递ID令牌,而我想验证此ID令牌。
这是正确的方法吗?或者,如果有更好的方法来实现此工作流程。
我们可以利用Cognito用户组吗,这将是一种安全的方法吗?
我想严格地将一个用户组的表与另一个用户组的表分开。
我通过以下链接验证了ID令牌。
答案 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等协议的高安全性实施,这些协议使用自定义代码很难实施且非常复杂。