首页 > 解决方案 > aws cognito - 是否可以在不使用身份池的情况下使用基于角色的权限控制

问题描述

背景

我在我的前端网站中使用 Amplify Framework(javascript) 进行注册/登录。

登记

            Auth.signUp({
                username,
                password,
                attributes: {
                    email: email
                }
            })

登录

Auth.signIn(payload.username,payload.password)

每次用户登录时,都会将 cognito id 令牌存储在 localStorage 中,用于访问 API Gateway 中的 API。

这是我的 API Gateway api 设置。 在此处输入图像描述 在此处输入图像描述

对于当前设计,每个成功登录的用户都可以调用 ALL api。

问题

现在我想对调用api做基于角色的权限控制,例如角色banner_admin只能调用/banner api,而角色device_admin只能调用/equipment api。

经过一番研究,Identity Pool 似乎能够做到这一点。但我不想更改我的登录流程。

有人可以提供最快、最方便的方法来实现我的应用程序中基于角色的权限控制吗?是否可以不使用身份池?

标签: amazon-web-servicesamazon-cognito

解决方案


是的,可以在不使用身份池服务的情况下执行此操作。实际上,身份池不是用于此目的的。它只是将临时凭证交换给经过身份验证或未经身份验证的用户以访问您的 AWS 资源。

为此,您应该使用 Cognito 用户池服务支持的组。一旦用户通过 Cognito 身份验证,他获得的声明将包括他所属的组信息(如果您将用户添加到用户池中的特定组)。您可以根据该组处理权限。

在发布确认 Cognito 事件后,您可以触发您的 lambda 函数,然后您可以在后台将用户添加到相应的用户组。


推荐阅读