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

令牌生成前 Lambda 触发器

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

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

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

令牌生成前 Lambda 触发器源

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

令牌生成前 Lambda 触发器参数

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

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

令牌生成前请求参数

groupConfiguration

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

groupsToOverride

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

iamRolesToOverride

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

preferredRole

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

令牌生成前响应参数

claimsToAddOrOverride

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

claimsToSuppress

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

注意

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

groupOverrideDetails

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

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

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

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

Node.js
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
JSON
{ "request": {}, "response": {} }

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

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

Node.js
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
JSON
{ "request": {}, "response": {} }