如何让前端UI识别当前登录用户持有的AWS IAM权限?
AWS Cognito 细粒度权限前端同步方案
方案1:JWT自定义声明注入(最优通用方案)
该方案可以完全实现你预期的「前端直接解析JWT获取权限」的体验,完全不受Cognito用户池25个自定义属性的限制:
- 你可以将用户的细粒度权限存储在自行管理的数据库(如DynamoDB)中,关联用户的Cognito唯一子ID(sub字段)
- 配置Cognito用户池的预令牌生成触发器,绑定Lambda函数:每次用户登录、刷新令牌时,Lambda会自动触发,查询对应用户的权限列表,将权限数组以自定义声明的形式注入到ID令牌或访问令牌中,比如声明名设为
custom:permissions - 前端获取到JWT后,直接解析该声明即可拿到完整权限列表,用于控制UI元素的显隐,无需额外接口调用,且每次令牌刷新都会自动同步最新权限,不会出现数据过时问题
方案2:IAM策略拉取优化方案(适配坚持用IAM存储权限的场景)
如果你必须基于Cognito Identity Pool的IAM策略做权限管控,不需要额外维护权限表,可以优化你提到的第二种方案规避缺陷:
- 将
getUserPermissions接口的调用逻辑整合到前端的登录流程、令牌自动刷新钩子中,每次身份凭证更新时自动触发调用,将返回的权限列表存储在前端全局状态(如Vuex、Redux、原生应用全局存储)中,无需业务层手动调用,不会出现遗漏调用导致的权限过时问题 - 解析IAM策略时直接使用AWS官方SDK提供的IAM策略校验能力,无需自行编写解析逻辑,降低实现复杂度
- 可以给接口返回的权限数据增加5-15分钟的前端缓存,降低Lambda调用频率,控制成本
重要提醒
前端基于权限控制UI显隐仅为优化用户体验使用,所有敏感操作的权限校验必须在后端/API网关层通过IAM能力完成,避免前端被篡改后出现越权操作。
内容的提问来源于stack exchange,提问作者Jose Quesada
相关产品推荐
相关产品推荐

