能否修改WSO2令牌响应?如何添加自定义参数app_name
在WSO2 OAuth2令牌响应中添加自定义参数的实现方案
当然可以实现!我来给你分享两种生产环境里常用的方法,帮你在令牌响应Payload中添加"app_name":"ABC"这类自定义属性:
方法一:自定义令牌生成器(适合高度定制场景)
这种方式通过扩展WSO2的令牌生成逻辑来实现,灵活性很高:
- 编写一个Java类,继承
org.wso2.carbon.identity.oauth2.token.AbstractOAuthTokenGenerator
- 编写一个Java类,继承
- 重写
generate()方法,在生成令牌DTO后添加自定义字段。这里给你一个示例代码片段,你可以根据实际需求调整(比如动态从应用元数据里获取app名称,而不是硬编码):
- 重写
@Override public OAuth2TokenDTO generate(OAuth2TokenReqMessageContext tokReqMsgCtx) throws OAuth2Exception { OAuth2TokenDTO tokenDTO = super.generate(tokReqMsgCtx); // 这里可以替换为根据客户端ID查询应用名称的逻辑 String appName = "ABC"; tokenDTO.addCustomParameter("app_name", appName); return tokenDTO; }
- 把这个类打包成JAR,放到WSO2 IS安装目录下的
<IS_HOME>/repository/components/dropins文件夹里
- 把这个类打包成JAR,放到WSO2 IS安装目录下的
- 修改
<IS_HOME>/repository/conf/identity/identity.xml配置文件,指定使用你的自定义令牌生成器:
- 修改
<OAuth> <TokenGenerators> <TokenGenerator class="com.your.package.YourCustomTokenGenerator" type="default"/> </TokenGenerators> </OAuth>
- 重启WSO2 Identity Server,之后再请求令牌,响应里就会带上
app_name字段了。
- 重启WSO2 Identity Server,之后再请求令牌,响应里就会带上
方法二:用脚本中介快速实现(无需编写Java代码)
如果不想搞Java开发,用WSO2的脚本中介就能快速搞定:
- 登录WSO2 IS管理控制台,进入Main > Identity > OAuth > OAuth2 Token Configuration
- 找到令牌端点(Token Endpoint)的配置,添加一个JavaScript类型的脚本中介
- 写入以下脚本逻辑,把自定义字段插入到响应Payload里:
var responsePayload = JSON.parse(mc.getProperty("RESPONSE_PAYLOAD")); // 同样,这里可以改成根据客户端ID动态获取应用名称的逻辑 responsePayload.app_name = "ABC"; mc.setProperty("RESPONSE_PAYLOAD", JSON.stringify(responsePayload));
- 保存配置后直接测试令牌请求,就能看到响应里新增了
app_name字段。
- 保存配置后直接测试令牌请求,就能看到响应里新增了
小提示
- 不要一直硬编码"ABC"哦,实际场景里你可以通过客户端ID,调用WSO2的应用管理API或者JDBC查询,从应用注册表中动态获取对应的应用名称
- 方法一修改后必须重启服务器,方法二一般不需要,但建议测试前重启一下确保配置生效
内容的提问来源于stack exchange,提问作者jayesh
相关产品推荐
相关产品推荐

