本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
利用用户迁移 Lambda 触发器导入用户
使用这种方法,当用户首次登录您的应用程序或请求重置密码时,您可以将用户从现有用户目录无缝迁移到用户池。向您的用户池添加一个 迁移用户 Lambda 触发器 函数,它会接收有关尝试登录的用户的元数据,并从外部身份源返回用户配置文件信息。有关此 Lambda 触发器的详细信息以及示例代码(包括请求和响应参数),请参阅迁移用户 Lambda 触发器参数。
在开始迁移用户之前,请在您的 AWS 账户中创建一个用户迁移 Lambda 函数,并将该 Lambda 函数设置为您的用户池中的用户迁移触发器。向您的 Lambda 函数添加授权策略,该策略仅允许 Amazon Cognito 服务账户主体 cognito-idp.amazonaws.com
调用该 Lambda 函数,并且只能在您自己的用户池的上下文中进行。有关更多信息,请参阅对 AWS Lambda 使用基于资源的策略(Lambda 函数策略)。
登录流程
-
用户打开您的应用程序,然后使用亚马逊 Cognito 用户池API或通过 Amazon Cognito 托管的用户界面登录。有关如何简化使用 Amazon Cogn APIs ito 登录的更多信息,请参阅。将 Amazon Cognito 身份验证和授权与 Web 和移动应用程序集成
-
您的应用程序将用户名和密码发送至 Amazon Cognito。如果您的应用程序具有您使用构建的自定义登录界面 AWS SDK,则您的应用程序必须使用InitiateAuth或AdminInitiateAuth与
USER_PASSWORD_AUTH
或ADMIN_USER_PASSWORD_AUTH
流程。当您的应用程序使用其中一个流程时,会SDK将密码发送到服务器。注意
在添加用户迁移触发器之前,请在您的应用程序客户端的设置中激活
USER_PASSWORD_AUTH
或ADMIN_USER_PASSWORD_AUTH
流程。您必须使用这些流程而不是默认USER_SRP_AUTH
流程。Amazon Cognito 必须向您的 Lambda 函数发送密码,以便它可以验证您的用户在另一个目录中的身份验证。会SRP掩盖您的 Lambda 函数中用户的密码。 -
Amazon Cognito 检查提交的用户名是否与用户池中的用户名或别名匹配。您可以将用户的电子邮件地址、电话号码或首选用户名设置为用户池中的别名。如果用户不存在,Amazon Cognito 会将参数(包括用户名和密码)发送到您的 迁移用户 Lambda 触发器 函数。
-
您的 迁移用户 Lambda 触发器 函数使用您的现有用户目录或用户数据库检查用户,或验证用户身份。该函数返回 Amazon Cognito 存储在用户池的用户配置文件中的用户属性。仅当提交的用户名与别名属性匹配时,您才能返回
username
参数。如果您希望用户继续使用其现有密码,您的函数将在 Lambda 响应中将属性finalUserStatus
设置为CONFIRMED
。您的应用程序必须返回 迁移用户 Lambda 触发器参数 中显示的所有"response"
参数。重要
不要在您的用户迁移 Lambda 代码中记录整个请求事件对象。此请求事件对象包括用户的密码。如果您不对日志进行消毒,则密码会显示在 CloudWatch 日志中。
-
Amazon Cognito 在您的用户池中创建用户配置文件,并将令牌返回您的应用程序客户端。
-
您的应用程序执行令牌接收,接受用户身份验证,然后继续处理请求的内容。
迁移用户后,请使用 USER_SRP_AUTH
进行登录。Secure Remote Password (SRP) 协议不会通过网络发送密码,并且与迁移期间使用的USER_PASSWORD_AUTH
流程相比,它具有安全优势。
如果在迁移过程中出现错误,包括客户端设备或网络问题,您的应用程序会收到来自 Amazon Cognito 用户池的错误响应。API发生这种情况时,Amazon Cognito 可能会也可能不会在您的用户池中创建用户账户。然后,用户应尝试再次登录。如果登录反复失败,请尝试在您的应用程序中使用忘记密码流程重置用户密码。
忘记密码流程还会使用 UserMigration_ForgotPassword
事件源调用您的 迁移用户 Lambda 触发器 函数。由于用户在请求密码重置时没有提交密码,因此 Amazon Cognito 在发送到您的 Lambda 函数的事件中不包含密码。您的函数只能在现有用户目录中查找用户并返回属性,以添加到用户池中的用户配置文件中。在您的函数完成调用并将其响应返回到 Amazon Cognito 后,您的用户池会通过电子邮件或发送密码重置代码。SMS在您的应用程序中,提示您的用户输入确认码和新密码,然后通过请求将该信息发送给 Amazon Cognito。ConfirmForgotPasswordAPI您还可以在 Amazon Cognito 托管 UI 中使用内置的忘记密码流程页面。