WSO2 IS 7.1.0无法在x-jwt-assertion头中发送自定义声明#24397
解决WSO2 IS 7.1作为APIM 4.5第三方密钥管理器时自定义声明不显示在x-jwt-assertion的问题
1. 确认IS中自定义声明的配置
- 在IS管理控制台的Claim Management中,检查自定义声明是否已创建,并且勾选了Supported by JWT选项
- 确保声明的Local Claim URI和JWT Claim URI正确映射,例如本地URI设为
http://wso2.org/claims/custom/myattr,JWT URI设为my_custom_attr(按需命名) - 验证用户档案中的自定义属性已关联到该声明:在用户编辑页面的Profile标签下,确认对应自定义属性有值且与声明绑定
2. 配置APIM允许从密钥管理器获取自定义声明
在APIM的<APIM_HOME>/repository/conf/deployment.toml中添加以下配置:
[apim.jwt] enable_custom_claims_from_km = true # 可选:若需全局包含所有自定义声明,添加此配置 apim.jwt.include_all_custom_claims = true
修改后重启APIM服务
3. 配置IS在令牌中包含自定义声明
在IS的<IS_HOME>/repository/conf/deployment.toml中配置:
[oauth.jwt] include_custom_claims = true # 确保JWT生成时包含用户属性映射的声明 [oauth.id_token] include_user_claims = true
重启IS服务
4. 检查自定义JWT处理jar包逻辑
- 确认你的jar包在生成
x-jwt-assertion时未过滤自定义声明,可通过调试日志跟踪JWT生成流程 - 启用IS和APIM的调试日志排查声明传递:
在各自的deployment.toml中添加:
重启服务后,查看日志中是否有自定义声明的读取和传递记录[logger.oauth2] level = "DEBUG" appenders = ["CONSOLE", "FILE"] [logger.jwt] level = "DEBUG" appenders = ["CONSOLE", "FILE"]
5. 验证与测试
- 调用受保护的API,提取响应头中的
x-jwt-assertion值 - 用JWT解码工具解码JWT,检查Payload中是否存在自定义声明
- 若仍未出现,检查API的订阅范围配置:确保API的允许声明列表包含你的自定义声明,或全局配置允许所有声明传递
内容的提问来源于stack exchange,提问作者Narges Ghelichi
相关产品推荐
相关产品推荐

