如何在Cognito中撤销所有用户全部刷新令牌实现全员强制重新登录
Cognito全员强制登出可行操作方案
Cognito没有提供原生的一键全局撤销所有用户刷新令牌的接口,你可以根据你的用户池量级选择以下三种方案操作:
方案1:批量调用全局登出接口(即时生效,适合中小量级用户池)
你可以遍历用户池下所有用户,逐个调用AdminUserGlobalSignOut接口,该接口会直接吊销目标用户所有设备上的有效刷新令牌、访问令牌、ID令牌,所有已存在的会话都会直接失效。
- 操作步骤:
- 调用
ListUsers接口分页拉取用户池内所有用户的用户名 - 遍历所有用户名,逐个调用
AdminUserGlobalSignOut接口执行全局登出 - 若用户池用户量超过1万,建议结合AWS Lambda做异步批量处理,避免单次脚本执行超时
- 调用
- 注意:该操作不可逆,执行前建议先选取少量测试用户验证效果,再全量执行。
方案2:轮换令牌签名密钥(操作成本低,适合大量级用户池)
如果你的用户池用户量在十万级以上,批量调用接口成本过高,可以选择轮换Cognito用户池用于签名JWT令牌的密钥,所有之前签发的令牌都会因签名校验不通过被判定为非法,实现全局强制登出。
- 操作步骤:
- 进入AWS Cognito控制台,打开对应的用户池配置页
- 切换到「应用程序集成」标签,找到「令牌签名密钥」配置区
- 点击「旋转密钥」并确认操作即可
- 注意:
- 密钥旋转存在最长24小时的 propagation 周期,部分区域的令牌校验不会立即失效,24小时内会全量生效
- 如果你自有服务端做了JWT本地校验,需要同步清除JWKS缓存,避免新签发的合法令牌校验不通过
- 该操作会让所有未过期的ID令牌、访问令牌也同时失效,影响范围更广
方案3:应用侧新增校验逻辑(即时生效,兜底方案)
如果你需要立刻实现全量用户强制登录,可以直接在iOS应用侧新增校验逻辑:在应用启动、接口请求前判断本地存储的令牌签发时间早于你指定的强制登录时间点,就直接清空本地存储的所有令牌,跳转到登录页,不需要依赖Cognito侧的操作。
内容的提问来源于stack exchange,提问作者Ahxan Ch
相关产品推荐
相关产品推荐

