如何在WSO2 API Manager 4.3.0中将自定义请求头值作为JWT声明添加?
如何在WSO2 API Manager 4.3.0中将自定义请求头值作为JWT声明添加?
我之前刚好折腾过这个需求,在WSO2 APIM 4.3.0里把自定义请求头塞进JWT声明里其实没那么复杂,跟着下面的步骤一步步来就行:
第一步:创建自定义声明
- 登录APIM管理控制台,从主菜单进入「身份 > 声明 > 列表」
- 点击「添加」按钮新建声明:
- 声明URI填
http://wso2.org/claims/custom/customid(可以根据你的需求调整URI路径,只要保证唯一就行) - 显示名称设为
X-Custom-Id,方便后续识别 - 一定要勾选「在ID Token中包含」和「在访问令牌中包含」这两个选项,确保声明能被注入到JWT里
- 声明URI填
- 保存这个新声明
第二步:配置API入站序列提取请求头
- 打开APIM发布者控制台,找到你要修改的目标API,进入「设计 > 序列」页面
- 选择「入站序列」,点击「添加中介」,找到「Property」中介器并添加:
- 名称填
custom_id - 表达式输入
get-property('transport', 'X-Custom-Id'),这个表达式的作用就是从请求里提取X-Custom-Id头的对应值 - 勾选「作用域」为
axis2,确保这个属性能被后续步骤读取到
- 名称填
- 接着添加一个「Script」中介器,用JavaScript把提取到的头值绑定到用户声明上下文里:
var realmContext = mc.getProperty('api.ut.user.realm.context'); var userName = mc.getProperty('api.ut.user.name'); var userClaims = realmContext.getRealm().getUserStoreManager().getUserClaimValues(userName, null, null); userClaims.put('http://wso2.org/claims/custom/customid', mc.getProperty('custom_id')); mc.setProperty('api.ut.user.claim.values', userClaims); - 保存配置好的入站序列,然后重新发布你的API,让新配置生效
第三步:验证配置是否生效
- 用Postman或者curl发送一个请求到你的API,记得在请求头里带上
X-Custom-Id: 你的测试值 - 捕获网关转发给后端的JWT令牌,用JWT解码工具解析后,就能看到我们自定义的声明已经带着请求头的测试值出现在令牌里了
- 用Postman或者curl发送一个请求到你的API,记得在请求头里带上
小提示:如果最后验证时没看到自定义声明,先检查这几点:
- 声明配置里的「包含」选项有没有正确勾选
- 入站序列里的Property中介器是不是在Script之前执行的(顺序很重要!)
- 请求头的名称是不是和表达式里的完全一致(这个是大小写敏感的哦)
内容来源于stack exchange
相关产品推荐
相关产品推荐

