AppSync中使用AWS_IAM与Cognito用户池认证时如何获取用户信息
嘿,我来帮你拆解这两种AppSync认证方式下获取用户信息的方法~
使用AWS_IAM认证时从$context获取用户信息
当你在AppSync中采用AWS_IAM认证时,用户的身份信息会被封装在$context.identity对象里,你可以直接访问以下核心字段:
accountId: 当前用户所属的AWS账号IDuserId: IAM身份的唯一标识(可能是IAM用户ID、角色ARN或者联邦用户ID)arn: 该IAM身份的完整ARNsourceIp: 发起请求的客户端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
相关产品推荐
相关产品推荐

