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

如何在WSO2 Identity Server 6.0.0的Access Token中添加自定义字段?

在WSO2 Identity Server 6.0.0中为OAuth2 Access Token添加自定义字段

WSO2 Identity Server 6.0.0支持通过配置或自定义扩展两种方式,为/oauth2/token返回的JWT格式Access Token添加额外字段,以下是具体实现指引:

方式一:通过配置直接添加用户属性(无需编码)

如果要添加的是用户已存的属性(如邮箱、手机号、自定义用户字段),可直接修改配置文件实现:

  1. 打开IS安装目录下的repository/conf/deployment.toml文件
  2. 添加以下配置,指定需要注入到Access Token的用户属性URI:
[oauth.extensions]
claim_dialect = "http://wso2.org/claims"
access_token_claims = ["http://wso2.org/claims/emailaddress", "http://wso2.org/claims/mobile", "http://wso2.org/claims/custom_field"]

注:属性URI可在IS管理控制台的Claims > List页面中查看对应属性的完整URI。

  1. 重启WSO2 Identity Server,后续获取的Access Token将自动包含指定的用户属性字段。

方式二:通过自定义扩展添加动态字段(复杂场景适用)

如果需要添加的字段需要自定义逻辑处理(如拼接字段、从第三方数据源取值),可通过实现Token发行器接口扩展:

  1. 创建Java类,实现org.wso2.carbon.identity.oauth2.token.OAuth2TokenIssuer接口,重点重写createAccessToken方法处理JWT Token的字段注入:
import org.wso2.carbon.identity.oauth2.token.OAuth2TokenReqMessageContext;
import org.wso2.carbon.identity.oauth2.token.OAuth2TokenIssuer;
import org.wso2.carbon.identity.oauth2.token.DefaultOAuth2TokenIssuer;
import org.wso2.carbon.identity.oauth2.IdentityOAuth2Exception;
import org.wso2.carbon.user.api.User;
import java.util.Map;

public class CustomTokenIssuer implements OAuth2TokenIssuer {

    @Override
    public String createIDToken(OAuth2TokenReqMessageContext tokReqMsgCtx) throws IdentityOAuth2Exception {
        // 如需修改ID Token可在此处理,否则调用默认实现
        return new DefaultOAuth2TokenIssuer().createIDToken(tokReqMsgCtx);
    }

    @Override
    public String createAccessToken(OAuth2TokenReqMessageContext tokReqMsgCtx) throws IdentityOAuth2Exception {
        DefaultOAuth2TokenIssuer defaultIssuer = new DefaultOAuth2TokenIssuer();
        // 先获取默认生成的Token
        String accessToken = defaultIssuer.createAccessToken(tokReqMsgCtx);
        
        // 判断当前生成的是JWT格式的Bearer Token
        if ("bearer".equals(tokReqMsgCtx.getOauth2AccessTokenReqDTO().getTokenType()) && 
            "JWT".equals(tokReqMsgCtx.getAccessTokenIssuerProperties().get("token_type"))) {
            
            // 获取当前授权用户信息及现有Claims
            User authorizedUser = tokReqMsgCtx.getAuthorizedUser();
            Map<String, Object> claims = tokReqMsgCtx.getClaims();
            
            // 添加自定义字段
            claims.put("user_fullname", authorizedUser.getFirstName() + " " + authorizedUser.getLastName());
            claims.put("custom_role", "internal_admin");
            
            // 重新生成包含自定义字段的JWT Token
            accessToken = defaultIssuer.generateJWTToken(tokReqMsgCtx, claims);
        }
        return accessToken;
    }

    @Override
    public void init() {
        new DefaultOAuth2TokenIssuer().init();
    }

    @Override
    public String getTokenType() {
        return new DefaultOAuth2TokenIssuer().getTokenType();
    }
}
  1. 将编译后的jar包放入IS安装目录的repository/components/dropins文件夹
  2. 修改deployment.toml配置,指定使用自定义Token发行器:
[oauth.token_issuer]
impl = "com.yourcompany.CustomTokenIssuer"
  1. 重启WSO2 Identity Server,后续生成的Access Token将包含自定义字段。

注意事项

  • 若当前使用的是引用令牌(Reference Token),需先在服务提供者配置中(Service Providers > 目标服务提供者 > OAuth/OpenID Connect Configuration)将Token Issuer设置为JWT格式,否则无法直接在Token中添加字段。
  • 添加的字段需符合JWT规范,避免使用特殊字符或冲突字段名。

内容的提问来源于stack exchange,提问作者mohamed hamada

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 19:20:00