You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在AWS中请求JWT id token时能否添加动态自定义数据?Cognito场景咨询

AWS Cognito ID Token添加动态自定义数据实现方案

完全可以实现你的需求,无需修改现有登录代码,核心使用Amazon Cognito用户池内置的预令牌生成(Pre Token Generation)触发器,该触发器会在Cognito每次生成ID Token、Access Token前自动调用,你可以在触发的逻辑中拉取数据库动态数据,注入到令牌的自定义声明中。


具体实现步骤

步骤1:创建预令牌生成Lambda函数

新建Node.js运行环境的Lambda函数,编写拉取动态数据、注入自定义声明的逻辑,示例代码如下:

exports.handler = async (event) => {
    // 获取当前登录用户的用户名/用户ID
    const username = event.userName;
    // 替换为你自己的数据库查询逻辑,支持DynamoDB、RDS等任意存储
    const dynamicUserData = await queryDynamicDataFromDB(username);

    // 注入自定义字段到ID Token,自定义字段建议加custom:前缀避免和内置字段冲突
    event.response = {
        claimsToAddOrOverride: {
            "custom:userLevel": dynamicUserData.level,
            "custom:recentLoginTime": dynamicUserData.recentLoginTime,
            // 可根据需求添加任意自定义字段
        }
    };

    // 必须将event对象返回给Cognito
    return event;
};

// 示例数据库查询方法,替换为你的实际业务逻辑
async function queryDynamicDataFromDB(username) {
    // 此处编写你的数据库查询代码,注意给Lambda执行角色配置对应数据库的访问权限
    return {
        level: "VIP",
        recentLoginTime: Date.now()
    }
}

步骤2:关联Lambda到Cognito用户池

  1. 进入AWS Cognito控制台,打开你正在使用的用户池
  2. 切换到「触发器」配置页
  3. 在「预令牌生成」下拉选项中,选择你上一步创建的Lambda函数
  4. 保存配置即可,Cognito会自动配置调用Lambda的权限

步骤3:验证效果

你现有贴出的登录代码无需做任何修改,用户登录成功后拿到的idToken就已经包含了你注入的自定义字段,你可以直接用JWT解码工具解码idToken验证自定义字段是否存在。


注意事项

  • 刷新令牌换取新ID Token时,也会自动触发预令牌生成触发器,新生成的ID Token也会携带最新的动态数据,无需额外处理
  • 自定义字段不要存入过大内容,避免超出JWT令牌的大小限制
  • 确保Lambda的执行角色配置了对应数据库的访问权限,避免查询数据失败

内容的提问来源于stack exchange,提问作者KIRAN K J

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 15:48:03