AWS Cognito单用户池多应用及社交登录权限控制方案咨询
AWS Cognito 多应用共享用户池实现方案
核心需求落地步骤
- 单个用户池多应用共用+统一Lambda登录逻辑
- 仅创建1个Cognito用户池,在用户池「应用程序客户端」配置栏为每个需要接入的业务应用单独创建应用客户端,每个客户端分配唯一的
client_id,所有客户端共享同一份用户数据。 - 把账号密码校验、令牌生成、登录态管理等通用逻辑封装到同一个Lambda函数中,所有业务应用的登录请求统一调用该Lambda,Lambda内部调用Cognito的SDK完成基础认证流程,无需每个应用单独开发登录能力。
- 仅创建1个Cognito用户池,在用户池「应用程序客户端」配置栏为每个需要接入的业务应用单独创建应用客户端,每个客户端分配唯一的
- 同一用户池支持Google、Facebook等社交登录
- 进入用户池「身份提供商」配置页,分别添加Google、Facebook作为第三方身份提供商,按提示填入对应平台申请的客户端ID、密钥、授权scope、映射属性等配置。
- 回到每个应用客户端的配置页,开启关联刚才添加的社交身份提供商,所有接入的应用都可以直接使用同一套社交登录配置,无需重复对接第三方平台。
- 应用权限校验+多应用授权能力
- 先在用户池「属性」配置中新增自定义属性,比如命名为
custom:allowed_apps,用于存储用户有权限访问的应用标识(可以是应用的client_id或者自定义的应用编码,多个用英文逗号分隔)。 - 为用户池配置预身份验证(Pre Authentication)Lambda触发器,关联一个权限校验Lambda:每次登录请求触达Cognito时,会先执行该触发器,逻辑为获取本次请求的
client_id,查询对应用户的custom:allowed_apps字段,若当前应用标识不在列表中,直接抛出异常终止认证流程,Cognito会返回登录失败;校验通过则继续后续认证逻辑。 - 用户授权操作直接调用Cognito的
AdminUpdateUserAttributes接口,修改对应用户的custom:allowed_apps属性值即可,可灵活给单个用户添加/移除多个应用的访问权限。
- 先在用户池「属性」配置中新增自定义属性,比如命名为
Lambda调用登录是否支持社交登录
社交登录的完整流程需要用户在浏览器侧跳转到Google、Facebook的授权页面完成交互授权,无法纯后端通过Lambda直接调用完成整个社交登录流程,但可以将社交登录的回调处理逻辑放到Lambda中实现:
用户在前端跳转至第三方平台完成授权后,授权码会回调到你指定的Lambda地址,Lambda拿到授权码后调用Cognito接口交换令牌,同时触发前面的预身份验证权限校验逻辑,整套流程是可以跑通的。纯后端无用户交互的场景下不支持直接调用Lambda完成社交登录。
内容的提问来源于stack exchange,提问作者Chan Myae Aung
相关产品推荐
相关产品推荐

