You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过用户自定义声明custom claims实现AWS Amplify数据访问授权

AWS Amplify 门店标识绑定与基于Shop ID的授权实现方案

问题1:Shop ID与用户的绑定方案

  • 首先在Cognito用户池新增自定义用户属性custom:shop_id,类型设置为字符串,商家用户注册、后台审核分配门店时,直接通过Cognito Admin API或者Amplify Admin UI给对应用户的custom:shop_id属性赋值对应门店ID。
  • 配置Cognito预令牌生成触发器(Pre Token Generation Lambda),在用户每次申请令牌时,将custom:shop_id属性值写入JWT令牌的自定义声明中,声明键命名为shop_id,后续所有鉴权环节可直接从令牌中读取该值,无需重复查询用户池。
  • 若存在单个商家关联多个门店的场景,可将用户所属门店列表存在独立的用户元数据表中,预令牌生成时查询表数据,将门店ID数组写入shop_id声明即可。

问题2:基于Shop ID的Datastore模型授权实现

控制台可视化创建模型时的可选授权规则是基础配置,你可以直接修改项目中的schema.graphql文件自定义授权规则,实现基于Shop ID的权限控制,步骤如下:

  1. 所有需要按门店隔离的模型,新增shopID字段存储对应门店ID,作为权限匹配的依据。
  2. 在模型的@auth指令中添加自定义声明匹配规则,示例代码如下:
type ShopProduct @model @auth(rules: [
  # 核心规则:仅当用户JWT中shop_id声明的值与模型的shopID字段值匹配时,允许读写操作
  { allow: private, provider: userPools, operations: [read, write], claim: "shop_id", match: "shopID" },
  # 可按需补充其他规则,例如下方为消费者组添加商品只读权限
  { allow: groups, groups: ["customers"], operations: [read] }
]) {
  id: ID!
  productName: String!
  price: Float!
  shopID: String! # 必须字段,用于匹配用户的shop_id声明
}
  1. 执行amplify push更新后端配置,AppSync会自动加载该授权规则,Datastore侧无需额外配置即可自动适配权限逻辑。
  • 可选优化:新增AppSync管道Resolver,在创建、更新门店相关数据时,自动从用户JWT中读取shop_id赋值给模型的shopID字段,避免前端恶意传入其他门店ID越权操作。

内容的提问来源于stack exchange,提问作者Ali Fumagalli

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 05:39:03