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

如何在IdentityServer4的Connect/token端点添加自定义字段?

问题

我已经实现了IdentityServer4,现在遇到一个需求:当前Connect/token端点返回的响应字段如下:

{
  "id_token": "id token value",
  "access_token": "access token value",
  "token_type": "Bearer",
  "refresh_token": "a refresh token",
  "scope": "some scopes"
}

我希望在返回结果中添加自定义字段,比如:

{
  "id_token": "id token value",
  "access_token": "access token value",
  "token_type": "Bearer",
  "refresh_token": "a refresh token",
  "scope": "some scopes",
  "id":"any id",
  "url":"any url"
}

请问有没有办法拦截该请求并添加自定义字段?

解决方案

IdentityServer4提供了现成的扩展点来修改Connect/token的响应结果,下面是两种常用的实现方式:

方式一:实现ICustomTokenResponseGenerator接口

这是官方推荐的扩展方式,步骤如下:

  1. 创建自定义Token响应生成器类,实现ICustomTokenResponseGenerator接口:
public class CustomTokenResponseGenerator : ICustomTokenResponseGenerator
{
    public async Task<TokenResponse> GenerateAsync(TokenResponseGeneratorContext context)
    {
        // 获取原始的token响应对象
        var response = context.Result;
        
        // 向响应中添加自定义字段
        response.Custom.Add("id", "any id");
        response.Custom.Add("url", "any url");
        
        return response;
    }
}
  1. 在项目的Startup类中,将自定义实现注册到依赖注入容器,替换默认服务:
services.AddIdentityServer()
    // 保留原有配置(如客户端、身份资源等)
    .AddCustomTokenResponseGenerator<CustomTokenResponseGenerator>();

方式二:通过TokenResponseGenerated事件拦截

利用IdentityServer的事件系统,在token响应生成后插入自定义字段:
在Startup的IdentityServer配置中,注册事件处理器:

services.AddIdentityServer(options =>
{
    // 其他配置项
})
// 保留原有客户端、资源等注册
.AddAspNetIdentity<ApplicationUser>()
.AddEvents(options =>
{
    options.RaiseSuccessEvents = true;
})
.AddEventHandler<TokenResponseGeneratedEvent>(async (context) =>
{
    // 给响应添加自定义字段
    context.Response.Custom.Add("id", "any id");
    context.Response.Custom.Add("url", "any url");
});

两种方式都能满足需求:ICustomTokenResponseGenerator更专注于token响应的自定义逻辑,适合有复杂处理需求的场景;事件拦截方式则更灵活,可用于多种扩展场景。

内容的提问来源于stack exchange,提问作者Shoaib Ismail

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.21 20:33:21