创建身份验证质询 Lambda 触发器 - Amazon Cognito
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

创建身份验证质询 Lambda 触发器


            质询 Lambda 触发器
创建身份验证质询

如果指定自定义质询作为定义身份验证质询 触发器的一部分,则 Amazon Cognito 会在定义身份验证质询之后调用此触发器。它将创建一个自定义身份验证流程

系统调用此 Lambda 触发器来创建要向用户显示的质询。此 Lambda 触发器的请求包括 challengeNamesessionchallengeName 是一个字符串,是向用户显示的下一质询的名称。此属性的值在定义身份验证质询 Lambda 触发器中设置。

质询循环将一直重复到所有质询得到应答。

创建身份验证质询 Lambda 触发器参数

Amazon Cognito 传递给此 Lambda 函数的请求是以下参数和 Amazon Cognito 添加到所有请求中的常用参数的组合。

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "challengeName": "string", "session": [ ChallengeResult, . . . ], "clientMetadata": { "string": "string", . . . }, "userNotFound": boolean }, "response": { "publicChallengeParameters": { "string": "string", . . . }, "privateChallengeParameters": { "string": "string", . . . }, "challengeMetadata": "string" } }

创建身份验证质询请求参数

userAttributes

表示用户属性的一个或多个名称/值对。

userNotFound

当为您的用户池客户端将 PreventUserExistenceErrors 设置为 ENABLED 时,将填充此布尔值。

challengeName

新质询的名称。

session

会话元素是一组 ChallengeResult 元素,其中,每个元素包含以下元素:

challengeName

质询类型。以下值之一:"CUSTOM_CHALLENGE""PASSWORD_VERIFIER""SMS_MFA""DEVICE_SRP_AUTH""DEVICE_PASSWORD_VERIFIER""ADMIN_NO_SRP_AUTH"

challengeResult

如果用户成功完成质询,则设置为 true,否则设置为 false

challengeMetadata

您的自定义质询的名称。仅当 challengeName"CUSTOM_CHALLENGE" 时使用。

clientMetadata

一个或多个键值对,您可以将其作为自定义输入内容提供给为创建身份验证质询触发器指定的 Lambda 函数。您可以在 AdminRespondToAuthChallengeRespondToAuthChallenge API 操作中使用 ClientMetadata 参数,将此数据传递给 Lambda 函数。调用创建身份验证质询函数的请求不包括在 AdminInitiateAuthInitiateAuth API 操作的 ClientMetadata 参数中传递的数据。

创建身份验证质询响应参数

publicChallengeParameters

客户端应用程序要在向用户显示的质询中使用的一个或多个键/值对。此参数应包含所有必要信息,以向用户准确显示质询。

privateChallengeParameters

此参数仅由验证身份验证质询响应 Lambda 触发器使用。此参数应包含所需的所有信息,以验证用户对质询的响应。也就是说,publicChallengeParameters 参数包含向用户显示的问题,privateChallengeParameters 包含问题的有效答案。

challengeMetadata

您的自定义质询的名称(如果是自定义质询)。

创建身份验证质询示例

CAPTCHA 作为针对用户的质询而创建。CAPTCHA 图像的 URL 作为 captchaUrl 添加到公有质询参数中,并且预期答案添加到私有质询参数中。

Node.js
const handler = async (event) => { if (event.request.challengeName !== "CUSTOM_CHALLENGE") { return event; } if (event.request.session.length === 2) { event.response.publicChallengeParameters = {}; event.response.privateChallengeParameters = {}; event.response.publicChallengeParameters.captchaUrl = "url/123.jpg"; event.response.privateChallengeParameters.answer = "5"; } if (event.request.session.length === 3) { event.response.publicChallengeParameters = {}; event.response.privateChallengeParameters = {}; event.response.publicChallengeParameters.securityQuestion = "Who is your favorite team mascot?"; event.response.privateChallengeParameters.answer = "Peccy"; } return event; }; export { handler }