Aws Cognito:如何使用自定义属性授权无服务器堆栈中的用户?

时间:2020-07-07 18:33:59

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

问题: 在我的应用程序中,用户是团队的一部分,可以访问团队的资源(例如任务)。当用户向任务发出获取请求时,我必须验证该用户是否是拥有该任务的团队的一部分。我将如何在我的堆栈中做到这一点?

堆栈: 我有一个HttpApi形式的Api网关,后面带有一堆Lambda,可以从DynamoDb表中获取资源。

当前解决方案: 我已经在路由上配置了JWT授权者,并且正在发送用户登录到Lambda时获得的访问令牌。其中包含用户ID。我使用此ID对数据库进行额外的呼叫,以检查其有权访问哪些团队。这意味着每个请求都会额外调用dynamo数据库。

什么样的解决方案会更好? 我习惯于向我的令牌添加授权资源所需的声明(我已经在不同的公司中运行许多身份服务器),但这似乎并不是在此堆栈中完成的。我不确定授权用户使用aws无服务器堆栈的用户ID以外的信息来授权用户的“推荐”方式是什么。请咨询=)

以下是项目来源(正在进行的工作等): https://github.com/stilren/typescript-cdk-react/tree/master/backend

1 个答案:

答案 0 :(得分:0)

我最终使用“ CognitoIdentityServiceProvider”来使用户使用访问令牌-我想这是预期的解决方案。这意味着要调用idp而不是dynamodb extra,因此仍然不是我真正想要的,但我想我可以缓存响应(甚至在网关中也可以)

以下是使用auth令牌获取用户的代码 https://github.com/stilren/typescript-cdk-react/commit/72821b0df1373a556c30d5362da5f7cab30a5bd8#diff-3d5ea31f509f495ef777ea9120e4b996

这是完全提交,以授予使用cdk从lambda更新用户属性的权限: https://github.com/stilren/typescript-cdk-react/commit/72821b0df1373a556c30d5362da5f7cab30a5bd8