如何在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
相关产品推荐
相关产品推荐

