令牌生成前 Lambda 触发器 - Amazon Cognito
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

令牌生成前 Lambda 触发器

Amazon Cognito 在令牌生成之前调用此触发器,让您能够自定义身份令牌声明。

此 Lambda 触发器允许您在生成身份令牌之前自定义身份令牌。您可以使用此触发器来在身份令牌中添加新声明、更新声明或者隐藏声明。要使用此功能,可以从 Amazon Cognito 用户池 控制台中或通过 AWS CLI 更新用户池来关联 Lambda 函数。

有一些无法修改的声明。其中包括 acramraudauth_timeazpexpiatidentitiesisssubtoken_usenonceat_hashcognito:username

令牌生成前 Lambda 触发器源

triggerSource 值 触发事件
TokenGeneration_HostedAuth 通过 Amazon Cognito 托管 UI 登录页进行身份验证时调用。
TokenGeneration_Authentication 用户身份验证流完成之后调用。
TokenGeneration_NewPasswordChallenge 管理员创建用户之后调用。当用户必须更改临时密码时调用此流。
TokenGeneration_AuthenticateDevice 用户设备身份验证结束时调用。
TokenGeneration_RefreshTokens 用户尝试刷新身份和令牌时调用。

令牌生成前 Lambda 触发器参数

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

JSON
{ "request": { "userAttributes": { "string": "string", . . . }, "groupConfiguration": { "groupsToOverride": ["string", . . .], "iamRolesToOverride": ["string", . . .], "preferredRole": "string", "clientMetadata": { "string": "string", . . . } }, "response": { "claimsOverrideDetails": { "claimsToAddOrOverride": { "string": "string", . . . }, "claimsToSuppress": ["string", . . .], "groupOverrideDetails": { "groupsToOverride": ["string", . . .], "iamRolesToOverride": ["string", . . .], "preferredRole": "string" } } } }

令牌生成前请求参数

groupConfiguration

包含当前组配置的输入对象。包括 groupsToOverrideiamRolesToOverridepreferredRole

groupsToOverride

与为其发放身份令牌的用户相关联的组名称的列表。

iamRolesToOverride

与这些组相关联的当前 IAM 角色的列表。

preferredRole

用于指示首选 IAM 角色的字符串。

clientMetadata

一个或多个键值对,您可以将其作为自定义输入内容提供给 Lambda 函数,该函数是为令牌生成前触发器指定的。您可以使用 AdminRespondToAuthChallengeRespondToAuthChallenge API 操作中的 ClientMetadata 参数将此数据传递给 Lambda 函数。

令牌生成前响应参数

claimsToAddOrOverride

要添加或覆盖的声明的一个或多个键值对的映射。对于与组相关的声明,请改用 groupOverrideDetails。

claimsToSuppress

包含要从身份令牌中隐藏的声明的列表。

注意

如果某个值既要被隐藏又要被替换,则它将被隐藏。

groupOverrideDetails

包含当前组配置的输出对象。包括 groupsToOverrideiamRolesToOverridepreferredRole

groupOverrideDetails 对象已替换为您提供的。如果在响应中提供空或空对象,则组将被隐藏。要保持现有组配置不变,请在响应中将请求的 groupConfiguration 对象的值复制到 groupOverrideDetails 对象,并将其传回给服务。

令牌生成前示例:添加新声明并隐藏现有声明

此示例使用令牌生成前 Lambda 来添加新声明和隐藏现有声明。

Node.js
exports.handler = (event, context, callback) => { event.response = { "claimsOverrideDetails": { "claimsToAddOrOverride": { "attribute_key2": "attribute_value2", "attribute_key": "attribute_value" }, "claimsToSuppress": ["email"] } }; // Return to Amazon Cognito callback(null, event); };

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

JSON
{ "request": {}, "response": {} }

令牌生成前示例:修改用户的组成员资格

此示例使用令牌生成前 Lambda 来修改用户的组成员资格。

Node.js
exports.handler = (event, context, callback) => { event.response = { "claimsOverrideDetails": { "claimsToAddOrOverride": { "attribute_key2": "attribute_value2", "attribute_key": "attribute_value" }, "claimsToSuppress": ["email"], "groupOverrideDetails": { "groupsToOverride": ["group-A", "group-B", "group-C"], "iamRolesToOverride": ["arn:aws:iam::XXXXXXXXXXXX:role/sns_callerA", "arn:aws:iam::XXXXXXXXX:role/sns_callerB", "arn:aws:iam::XXXXXXXXXX:role/sns_callerC"], "preferredRole": "arn:aws:iam::XXXXXXXXXXX:role/sns_caller" } } }; // Return to Amazon Cognito callback(null, event); };

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

JSON
{ "request": {}, "response": {} }