We will build a Lambda trigger for both TypeScript and Python. This trigger will update claims using the claimsAndScopeOverrideDetails property in event.response. Specifically:
idTokenGeneration.claimsToAddOrOverride: update ID Token claimsaccessTokenGeneration.claimsToAddOrOverride: update Access Token claimssrc/runtimes/lambda-functions.authorizer and inside it, create pre-token-generation-trigger.ts./**
* Hàm này sẽ dùng để tổng hợp thông tin và tạo claims của user
* và bỏ vào trong token trước khi tạo token. Hoạt động với cả
* khi sign in và refresh tokens.
*
* @param event - lambda event
* @param context - lambda context
*
* @returns
*/
export async function handler(event: any, context: any) {
// Lấy thông tin từ userAttributes
const userAttrs = event.request.userAttributes;
const role = userAttrs["custom:role"] || "";
const fullName = userAttrs["name"];
// Gán lại response với claims và scopes
event.response = {
claimsAndScopeOverrideDetails: {
idTokenGeneration: {
claimsToAddOrOverride: {
"custom:role": role,
full_name: fullName,
},
},
accessTokenGeneration: {
claimsToAddOrOverride: {
"custom:role": role,
},
scopesToAdd: role ? [`role:${role}`] : [],
},
},
};
return event;
}

src/runtimes/lambda_functions.authorizer and inside it, create pre_token_generation_trigger.py.def handler(event, context):
"""
Hàm này sẽ dùng để tổng hợp thông tin và tạo claims của user
và bỏ vào trong token trước khi tạo token. Hoạt động với cả
khi sign in và refresh tokens.
:param event: lambda event
:param context: lambda context
:return: event với response được gán thêm claims
"""
# Lấy thông tin từ userAttributes
user_attrs = event["request"]["userAttributes"]
role = user_attrs.get("custom:role", "")
full_name = user_attrs.get("name", "")
# Gán lại response với claims và scopes
event["response"] = {
"claimsAndScopeOverrideDetails": {
"idTokenGeneration": {
"claimsToAddOrOverride": {
"custom:role": role,
"full_name": full_name,
},
},
"accessTokenGeneration": {
"claimsToAddOrOverride": {
"custom:role": role,
},
"scopesToAdd": [f"role:{role}"] if role else [],
},
},
}
return event

Upload the Lambda function to AWS:



pre-token-generation-trigger-jsNode.js 22.xx86_64


pre-token-generation-trigger-pyPython 3.12x86_64


lambda_function.handler and Save.


Now the Lambda trigger is ready. Next, we will attach it to the Cognito pre-token generation trigger.