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

AppSync中使用AWS_IAM与Cognito用户池认证时如何获取用户信息

嘿,我来帮你拆解这两种AppSync认证方式下获取用户信息的方法~

使用AWS_IAM认证时从$context获取用户信息

当你在AppSync中采用AWS_IAM认证时,用户的身份信息会被封装在$context.identity对象里,你可以直接访问以下核心字段:

  • accountId: 当前用户所属的AWS账号ID
  • userId: IAM身份的唯一标识(可能是IAM用户ID、角色ARN或者联邦用户ID)
  • arn: 该IAM身份的完整ARN
  • sourceIp: 发起请求的客户端IP地址
  • userAgent: 请求的客户端用户代理信息

举个实际的Resolver模板例子,你可以这样获取并使用用户ID:

{
  "version": "2017-02-28",
  "operation": "GetItem",
  "key": {
    "ownerId": { "S": "$context.identity.userId" }
  }
}
使用Cognito用户池认证时的身份信息结构

当把Cognito用户池作为AppSync的认证方式时,$context.identity会包含更贴近用户业务场景的身份数据,具体结构如下:

{
  "sub": "bcb5cd53-315a-40df-a41b-1db02a4c1bd9",
  "issuer": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_oicu812",
  "username": "skillet",
  "claims": {
    "sub": "bcb5cd53-315a-40df-a41b-1db02a4c1bd9",
    "aud": "7re1oap5fhm3ngpje9r81vgpoe",
    "email_verified": true,
    "event_id": "bb65ba5d-4689-11e8-bee7-2d0da8da81ab",
    "token_use": "id",
    "auth_time": 1524441800,
    "iss": "https://cognito-idp.us-west-2.amazonaws.com/us-west-2_..."
  }
}

这里几个关键字段的作用:

  • sub: Cognito用户的全局唯一标识符,不会随用户名修改而变化
  • username: 用户在Cognito用户池中设置的登录用户名
  • claims: 包含了ID Token里的所有声明信息,比如email_verified标记用户邮箱是否已验证,auth_time记录了用户完成认证的时间戳

你可以在Resolver中直接引用这些字段,比如用$context.identity.username获取当前登录用户名,或者用$context.identity.claims.email(如果你的Cognito池配置了返回邮箱字段)来获取用户的邮箱地址。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:29:40