身份验证前 Lambda 触发器 - Amazon Cognito

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

身份验证前 Lambda 触发器

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

注意

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

身份验证流概述

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

该请求包含来自您的应用程序传递给用户池InitiateAuthAdminInitiateAuthAPI操作的ClientMetadata值的客户端验证数据。

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

身份验证前 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 函数,请使用InitiateAuthAdminInitiateAuthAPI操作中的 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": {} }