Amazon Cognito
开发人员指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 Amazon AWS 入门

定义身份验证质询 Lambda 触发器

 质询 Lambda 触发器
定义身份验证质询

Amazon Cognito 调用此触发器以启动自定义身份验证流程

请求包含 session,这是一个包含在正在进行的身份验证流程中向用户显示的所有质询及相应结果的数组。质询详细信息 (ChallengeResult) 按时间顺序存储在 session 数组中,其中 session[0] 表示向用户显示的第一个质询。

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

定义身份验证质询 Lambda 触发器参数

这些是此 Lambda 函数除常用参数以外还必需的参数。

JSON
JSON
{ "request": { "userAttributes": { "string": "string", .... }, "session": [ ChallengeResult, ... ] }, "response": { "challengeName": "string", "issueTokens": boolean, "failAuthentication": boolean }

定义身份验证质询请求参数

userAttributes

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

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" 时使用。

定义身份验证质询响应参数

在响应中,您可以返回身份验证流程的下一阶段。

challengeName

一个包含下一质询的名称的字符串。如果您希望向您的用户显示新的质询,请在此处指定质询名称。

issueTokens

如果您确定用户已通过完成相关质询而进行了充分的身份验证,则设置为 true,否则设置为 false

failAuthentication

如果您想要终止当前的身份验证流程,则设置为 true,否则设置为 false

定义身份验证质询示例

此示例针对身份验证定义一系列质询并发布质询令牌 (仅在成功完成所有质询后)。

Node.js
Node.js
exports.handler = (event, context, callback) => { if (event.request.session.length == 1 && event.request.session[0].challengeName == 'SRP_A') { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'PASSWORD_VERIFIER'; } else if (event.request.session.length == 2 && event.request.session[1].challengeName == 'PASSWORD_VERIFIER' && event.request.session[1].challengeResult == true) { event.response.issueTokens = false; event.response.failAuthentication = false; event.response.challengeName = 'CUSTOM_CHALLENGE'; } else if (event.request.session.length == 3 && event.request.session[2].challengeName == 'CUSTOM_CHALLENGE' && event.request.session[2].challengeResult == true) { event.response.issueTokens = true; event.response.failAuthentication = false; } else { event.response.issueTokens = false; event.response.failAuthentication = true; } // Return to Amazon Cognito callback(null, event); }