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

身份验证前 Lambda 触发器

当用户尝试登录时,Amazon Cognito 会调用此触发器,这样您就可以创建接受或拒绝身份验证请求的自定义验证。

注意

触发器取决于 Amazon Cognito 激活触发器之前用户池中存在的用户。

身份验证前 Lambda 流程

客户端身份验证流程


                    身份验证前 Lambda 触发器 – 客户端流程

服务器身份验证流程


                    身份验证前 Lambda 触发器 – 服务器流程

该请求包含来自 ClientMetadata 值的客户端验证数据,该值由应用程序传递到用户池 InitiateAuth 和 AdminInitiateAuth API 操作。

有关更多信息,请参阅用户池身份验证流程

身份验证前 Lambda 触发器参数

这些是 Amazon Cognito 随同常见参数中的事件信息一起传递给此 Lambda 函数的参数。

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "validationData": { "string": "string", . . . }, "userNotFound": boolean }, "response": {} }

身份验证前请求参数

userAttributes

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

userNotFound

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

validationData

一个或多个键/值对,包含用户的登录请求中的验证数据。要将此数据传递给 Lambda 函数,请在 InitiateAuthAdminInitiateAuth API 操作中使用 ClientMetadata 参数。

身份验证前响应参数

Amazon Cognito 不需要响应中任何额外的返回信息。您的函数可以返回错误以拒绝登录尝试,或者使用 API 操作来查询和修改资源。

身份验证教程

在 Amazon Cognito 登录新用户之前,Amazon Cognito 激活身份验证前 Lambda 函数。请参阅这些适用于 JavaScript、Android 和 iOS 的登录教程。

平台 教程
JavaScript 身份开发工具包 通过 JavaScript 登录用户
Android 身份开发工具包 通过 Android 登录用户
iOS 身份开发工具包 通过 iOS 登录用户

身份验证前示例

此示例函数将阻止来自特定用户池应用程序客户端的用户登录用户池。

Node.js
exports.handler = (event, context, callback) => { if (event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked") { var error = new Error("Cannot authenticate users from this user pool app client"); // Return error to Amazon Cognito callback(error, event); } // Return to Amazon Cognito callback(null, event); };
Python
def lambda_handler(event, context): if event['callerContext']['clientId'] == "<user pool app client id to be blocked>": raise Exception("Cannot authenticate users from this user pool app client") # Return to Amazon Cognito return event

Amazon Cognito 将事件信息传递给 Lambda 函数。随后,该函数将相同事件对象随同响应中的任何更改返回给 Amazon Cognito。在 Lambda 控制台中,您可以设置一个测试事件,该事件包含与您的 Lambda 触发器相关的数据。以下是此代码示例的一个测试事件:

JSON
{ "callerContext": { "clientId": "<user pool app client id to be blocked>" }, "response": {} }