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

如何在AWS Cognito的IdToken Claims中通过claimsToAddOrOverride添加数组值

解决AWS Cognito Pre Token Generation添加数组Claim的问题

我刚好碰到过这个问题!AWS Cognito的Pre Token Generation Lambda触发器里,claimsToAddOrOverride的字段值只能是字符串类型,直接传数组会触发内部服务器错误,这就是你遇到的问题根源。

解决思路

Cognito生成的JWT对自定义Claim的类型有严格限制,除了少数预定义字段(比如aud),自定义Claim必须是字符串格式。所以我们需要把数组转成逗号分隔的字符串存入Claim,之后在客户端再解析回数组即可。

示例代码

1. Lambda端:将数组转为字符串

# 把字符串数组转为逗号分隔的字符串
target_scopes = ["test1", "test2"]
event["response"] = {
    "claimsOverrideDetails": {
        "claimsToAddOrOverride": {
            "scope": ",".join(target_scopes)
        }
    }
}

2. 客户端:解析字符串回数组

拿到IdToken后,先解码出Claim内容,再把字符串分割成数组:

// JavaScript客户端示例
const idToken = "你的IdToken内容";
// 解码JWT的Payload部分
const payload = JSON.parse(atob(idToken.split('.')[1]));
// 将逗号分隔的字符串转为数组
const scopeArray = payload.scope.split(',');
console.log(scopeArray); // 输出 ["test1", "test2"]

额外说明

如果你的数组元素里可能包含逗号,可以换用其他不会冲突的分隔符(比如|或者自定义特殊符号),只要确保客户端能正确识别分割规则就行。

内容的提问来源于stack exchange,提问作者Jayesh Dhandha

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:54:24