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

为临时密码过期用户实现Cognito托管UI自动重置密码

解决方案:自动处理Cognito过期临时密码的FORCE_CHANGE_PASSWORD用户

1. 利用Pre Authentication Lambda触发器实时处理登录尝试

这是最贴合需求的方案——在用户尝试登录时自动检测并重置过期的临时密码:

  • 核心逻辑:用户发起登录请求时,Lambda先执行预认证检查:

    • 获取用户状态与临时密码过期时间
    • 若用户处于FORCE_CHANGE_PASSWORD状态且密码已过期,调用AdminCreateUser API并指定MessageAction: "RESEND",重新生成临时密码并发送通知
    • 放行登录流程,用户将被引导至托管UI的密码修改页面
  • Lambda代码示例(Node.js):

const AWS = require('aws-sdk');
const cognito = new AWS.CognitoIdentityServiceProvider();

exports.handler = async (event) => {
  const { userPoolId, username } = event;
  
  // 获取用户详情
  const userParams = {
    UserPoolId: userPoolId,
    Username: username
  };
  const user = await cognito.adminGetUser(userParams).promise();
  
  // 检查用户状态及密码过期情况(此处以90天过期为例,可按需调整)
  const isForceChange = user.UserStatus === 'FORCE_CHANGE_PASSWORD';
  const passwordExpired = user.UserAttributes.some(attr => 
    attr.Name === 'password_last_changed' && 
    Date.now() > new Date(attr.Value).getTime() + 90*24*60*60*1000
  );
  
  if (isForceChange && passwordExpired) {
    // 重新发送临时密码
    const resetParams = {
      UserPoolId: userPoolId,
      Username: username,
      MessageAction: 'RESEND'
    };
    await cognito.adminCreateUser(resetParams).promise();
  }
  
  return event;
};
  • 配置注意:需为Lambda角色添加cognito-idp:AdminGetUser和cognito-idp:AdminCreateUser权限。

2. 捕获托管UI回调错误触发重置

当用户使用过期密码登录时,托管UI会将PasswordExpiredException错误返回至SPA回调页面:

  • 在SPA的回调逻辑中检测该错误类型
  • 调用后端接口或直接触发Lambda执行临时密码重置
  • 重置完成后,重定向用户回到Cognito托管UI发起登录

3. 批量自动化重置存量过期用户

若需处理已处于过期状态的存量用户,可设置定期批量任务:

  • 通过CloudWatch Events按固定频率(如每日)触发Lambda
  • Lambda扫描用户池中所有FORCE_CHANGE_PASSWORD状态的用户,筛选出密码已过期的对象
  • 批量调用AdminCreateUser带RESEND参数完成密码重置

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 00:12:19