首页 > 解决方案 > 使用 AWS Cognito 对前端应用程序进行基于角色的授权

问题描述

如何使用 Cognito 用户池实现基于角色的授权?构建一个前端 Angular 应用程序,我使用 Cognito 用户池进行身份验证。那里没有问题。我希望具有不同角色的用户看到应用程序的不同部分。所以需要从某个地方带回一个角色。当在用户池中创建用户时,我为用户分配了一个角色,并且可以在身份验证期间带回该角色信息。然后,我使用这个角色来决定为当前经过身份验证的用户显示哪些 UI 页面(例如在 Angular 中使用 CanActivate 等的身份验证守卫)。这仅在一定程度上有效,因为用户角色无法在 F5 刷新或用户通过直接输入 URL 路由到另一个页面(这会导致页面重新加载)中幸存下来。此用户角色信息需要以某种方式存储在令牌或用户会话中,因此只要用户会话有效,我们就可以检索用户角色。有谁知道怎么做?某处有例子吗?搜索,看到一些关于使用 AWS IAM 策略、Cognito 中的用户组等的讨论,但无法弄清楚。

Thanks a lot for looking,

马丁

标签: angularsessionauthorizationtoken

解决方案


好吧,让我回答我自己的问题。想出了一个办法。事实证明,AWS Cognito 将用户相关信息(创建时包含在用户池中的任何内容)保留在 id 令牌中。因此,如果我设计了一个字段作为用户角色,只要会话仍然有效,我就可以在登录后随时检索。因此,要控制对特定页面的访问,我只需要检查用户是否经过身份验证并且其角色是否符合预期(使用 CanActivate)。

它对我来说效果很好,但我不能 100% 确定使用 Cognito 进行身份验证和授权是否存在任何固有的安全风险。如果您知道以及如何避免它,请告诉我。


推荐阅读