如何仅通过邮箱/用户名查询Cognito中是否存在联邦身份用户
判断Cognito联邦身份用户是否存在的可行方案
接口直接查询方案
Cognito的联邦身份用户不会纳入普通用户池的常规用户查询范围,你可以通过以下两类官方接口实现判断:
- 用户池关联场景下调用
ListUsers/AdminListUsers接口
过滤条件设置为cognito:user_status = "EXTERNAL_PROVIDER",同时匹配联邦身份提供商对应的identities属性值,只要返回匹配结果即可确认该联邦身份已绑定用户池存在。 - 身份池独立场景下调用
LookupIdentityId接口
传入对应联邦IdP的标识名称和用户在该IdP的唯一ID,接口返回有效IdentityId则用户存在,抛出ResourceNotFoundException则用户不存在。该接口需要对应IAM权限,建议仅在后端侧调用。
前端轻量判断方案(基于Amplify)
如果你用Amplify做前端集成,可以直接调用Auth.federatedSignIn()传入身份参数做预校验:
捕获接口抛出的异常,如果返回UserAlreadyExistsException即可确认该联邦身份已存在,不需要实际完成登录流程。
注意事项
- 不要使用普通用户的
getUser、signIn类接口做联邦用户存在判断,这类接口仅查询用户池内的本地账号,不会返回联邦身份相关信息 - 如果你的逻辑在用户注册阶段触发,可以配置Cognito预注册Lambda触发器,在触发逻辑中直接查询身份信息做判断,不需要额外调用接口
内容的提问来源于stack exchange,提问作者Duc Dao
相关产品推荐
相关产品推荐

