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

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

身份验证前 Lambda 触发器

当用户尝试登录时,Amazon Cognito 会调用此触发器,以便您可以创建用于执行准备操作的自定义验证。例如,您可以拒绝身份验证请求或将会话数据记录到外部系统。

注意

当用户不存在或您的用户群体中已经有会话时,此 Lambda 触发器不会激活。如果将用户群体应用程序客户端的 PreventUserExistenceErrors 设置设为 ENABLED,则 Lambda 触发器将会激活。

身份验证流概述

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

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

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

身份验证前 Lambda 触发器参数

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

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 操作来查询和修改资源。

身份验证前示例

此示例函数阻止用户使用特定的应用程序客户端登录到您的用户群体。由于预身份验证 Lambda 函数不会在您的用户有现有会话时调用,因此,此函数仅阻止使用您想要屏蔽的应用程序客户端 ID 的会话。

Node.js
const handler = async (event) => { if ( event.callerContext.clientId === "user-pool-app-client-id-to-be-blocked" ) { throw new Error("Cannot authenticate users from this user pool app client"); } return event; }; export { handler };
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": {} }