配置 AWS Cognito 在创建管理员用户时发送验证电子邮件

Cognito

使用 AdminCreateUserCommand 在 AWS Cognito 中设置用户验证

在管理 Web 应用程序中的用户身份验证和授权时,确保安全且经过验证的用户群至关重要。 AWS Cognito 为用户管理提供了强大的解决方案,但集成自定义用户验证流程可能很复杂,尤其是当用户由管理员创建时。通常,当管理员创建用户时,Cognito 会发送默认邀请电子邮件。但是,将其替换为包含代码的自定义验证电子邮件可以增强安全性并提供更加个性化的用户体验。

为了实现这一点,开发人员可以利用 AWS CDK 进行后端基础设施设置,并利用 Amplify 进行前端操作。此方法涉及配置 Cognito 用户池,以在 AdminCreateUserCommand 启动的用户创建过程中触发自定义验证电子邮件。尽管在管理员创建流程方面存在挑战和文档差距,但可以通过设置特定的用户池配置并利用 AWS Lambda 进行自定义消息传递来自定义用户验证流程。

命令 描述
CognitoIdentityServiceProvider AWS SDK for JavaScript 中的此类会初始化允许与 AWS Cognito 服务交互的客户端。
AdminCreateUserCommand 此命令用于以管理员身份直接在 AWS Cognito 用户池中创建新用户,无需用户交互。
send 用于执行 AdminCreateUserCommand 的方法。它将命令发送到AWS服务以执行用户创建操作。
handler 一个 AWS Lambda 函数处理程序,用于处理来自 AWS Cognito 的事件,此处专门用于在用户创建期间自定义消息。
triggerSource Lambda 中事件对象的属性,指示触发器的来源,有助于根据 Cognito 中触发的操作类型有条件地执行逻辑。
response 在 Lambda 中用于修改 Cognito 返回的响应对象,特别是为验证电子邮件设置自定义电子邮件主题和消息。

自定义 AWS Cognito 电子邮件验证实施的详细说明

当管理员手动添加用户时,提供的脚本允许在 AWS Cognito 中创建和自定义用户验证流程。具体来说,第一个脚本使用适用于 JavaScript 的 AWS 开发工具包中的 AdminCreateUserCommand 在 Cognito 用户池中创建一个新用户。对于管理员需要加入用户而不要求他们完成通常的注册过程的情况,此命令特别有用。该命令包括 UserPoolId、Username、TemporaryPassword 和 UserAttributes 等参数。 UserAttributes 数组可用于传递基本详细信息,例如用户的电子邮件。提供临时密码用于初始登录,并将 DesiredDeliveryMediums 参数设置为“EMAIL”以确保用户通过电子邮件收到必要的通信。脚本的这一部分对于无需用户交互即可设置用户帐户至关重要。

此外,第二个脚本涉及一个作用于 CustomMessage 触发器的 Lambda 函数,这是 AWS Cognito 提供的一项功能,用于为用户邀请或验证等不同操作自定义消息传递。此 Lambda 函数检查触发事件是否为“CustomMessage_AdminCreateUser”并自定义电子邮件内容和主题行。通过修改 event.response 属性,脚本设置个性化电子邮件主题和包含验证码占位符的消息。此代码对于验证用户的电子邮件地址并确保只有经过验证的用户才能继续使用该应用程序至关重要。这些定制提供了更加品牌化和可控的用户体验,使初始用户交互与组织标准和安全策略保持一致。

在 AWS Cognito 中为管理员创建的用户实施自定义验证电子邮件流

TypeScript 和适用于 JavaScript 的 AWS 开发工具包

import { CognitoIdentityServiceProvider } from '@aws-sdk/client-cognito-identity-provider';
import { AdminCreateUserCommand } from '@aws-sdk/client-cognito-identity-provider';
const cognitoClient = new CognitoIdentityServiceProvider({ region: 'us-west-2' });
const userPoolId = process.env.COGNITO_USER_POOL_ID;
const createUser = async (email, tempPassword) => {
  const params = {
    UserPoolId: userPoolId,
    Username: email,
    TemporaryPassword: tempPassword,
    UserAttributes: [{ Name: 'email', Value: email }],
    DesiredDeliveryMediums: ['EMAIL'],
    MessageAction: 'SUPPRESS',  // Suppress the default email
  };
  try {
    const response = await cognitoClient.send(new AdminCreateUserCommand(params));
    console.log('User created:', response);
    return response;
  } catch (error) {
    console.error('Error creating user:', error);
  }
};

在 Cognito 中使用 AWS Lambda 触发器自定义电子邮件验证

用于自定义消息传递的 AWS Lambda 和 Node.js

exports.handler = async (event) => {
  if (event.triggerSource === 'CustomMessage_AdminCreateUser') {
    event.response.emailSubject = 'Verify your email for our awesome app!';
    event.response.emailMessage = \`Hello $\{event.request.userAttributes.name},
      Thanks for signing up to our awesome app! Your verification code is $\{event.request.codeParameter}.\`;
  }
  return event;
};

使用 AWS Cognito 自定义验证流程增强安全性和用户体验

实施 AWS Cognito 进行用户管理的一个关键方面是增强安全性并提供无缝的用户体验。定制用户验证流程的能力不仅可以通过验证用户身份来确保应用程序的安全,还允许企业根据其品牌定制用户旅程。这种定制在信任和安全至关重要的场景中尤其重要,例如银行、医疗保健或电子商务应用程序。通过利用 AWS Cognito 的功能发送自定义电子邮件,管理员可以确保用户从初次接触开始就获得一致的体验。此外,在 Cognito 中使用自定义属性(例如“区域设置”)使应用程序能够提供本地化体验,从而提高用户参与度和满意度。

此外,使用AWS CDK(云开发套件)集成这些功能允许开发人员使用熟悉的编程语言定义他们的云资源。这种方法简化了设置复杂配置(例如自定义验证流程)的过程。通过将整个基础设施编写为代码,可以最大限度地减少配置过程中人为错误的风险,并提高跨不同环境或应用程序生命周期阶段的设置的可重复性。 AWS Amplify 的前端集成通过提供一组工具和服务进一步增强了这一点,这些工具和服务有助于构建由 AWS 提供支持的安全且可扩展的全栈应用程序。

AWS Cognito 自定义验证常见问题解答

  1. 当管理员创建用户时,AWS Cognito 可以发送验证电子邮件吗?
  2. 是的,当通过 AdminCreateUserCommand 创建用户时,AWS Cognito 可以配置为发送自定义验证电子邮件而不是默认邀请电子邮件。
  3. 是否有必要使用 AWS Lambda 在 Cognito 中自定义验证电子邮件?
  4. 虽然不是强制性的,但使用 AWS Lambda 可以更灵活地自定义电子邮件内容、主题和其他参数,从而增强用户验证过程。
  5. 将 AWS CDK 与 Cognito 结合使用有哪些好处?
  6. AWS CDK 允许开发人员在代码中定义其云基础设施,从而简化设置、提高跨环境的一致性,并与 AWS Cognito 和其他 AWS 服务无缝集成。
  7. 自定义属性在 AWS Cognito 中如何工作?
  8. Cognito 中的自定义属性允许存储有关用户的附加信息,例如区域设置或首选项,这些信息可以根据配置可变或不可变。
  9. 验证流程是否可以针对不同地区的用户进行本地化?
  10. 是的,通过使用“区域设置”自定义属性并适当配置 AWS Lambda 触发器,可以本地化验证过程,从而为用户提供以其语言提供的个性化电子邮件。

随着基于云的应用程序的不断发展,对强大的用户管理系统的需求变得更加重要。 AWS Cognito 提供了一个强大的解决方案来管理用户生命周期,特别是使用 AdminCreateUserCommand。此功能允许管理员绕过标准用户注册工作流程并直接创建帐户,确保所有用户都通过自定义的电子邮件验证流程进行验证。将此功能与 AWS CDK 和 AWS Lambda 集成以实现自定义消息传递和验证代码的能力与安全应用程序开发的最佳实践紧密结合。此外,这些方法通过确保只有经过验证的用户才能访问敏感功能来支持数据保护法规的合规性。最终,采用 AWS Cognito 进行用户管理不仅简化了管理任务,还增强了各个部门应用程序的安全性和可用性。