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

OpenIddict 4.3.0迁移后无法获取交换响应中的自定义声明

解决OpenIddict 4.3.0自定义声明无法返回前端的问题

检查声明添加的目标配置

OpenIddict 4.x对声明目标的要求比3.x更严格,必须显式指定声明要写入的令牌类型。在Exchange流程中添加自定义声明时,需明确指定目标:

var identity = new ClaimsIdentity(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme);

// 同时指定写入IdentityToken和AccessToken(根据前端需求选择)
identity.AddClaim(ClaimTypes.NameIdentifier, user.Id.ToString(), 
    OpenIddictConstants.Destinations.AccessToken, 
    OpenIddictConstants.Destinations.IdentityToken);
identity.AddClaim("tenantid", user.TenantId.ToString(), 
    OpenIddictConstants.Destinations.AccessToken, 
    OpenIddictConstants.Destinations.IdentityToken);

验证UserInfo端点的配置

如果前端通过UserInfo端点获取声明,需确保服务器启用该端点,并给声明添加UserInfo目标:

服务器配置

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.SetUserInfoEndpointUris("/connect/userinfo");
        options.AllowAuthorizationCodeFlow(); // 确保启用前端使用的授权类型
    });

声明添加

identity.AddClaim("tenantid", user.TenantId.ToString(), 
    OpenIddictConstants.Destinations.UserInfo);

检查客户端Scope配置

确认Angular OIDC-Client请求的Scope包含所需范围(如profile或自定义Scope):

// Angular OIDC-Client配置示例
const config: UserManagerSettings = {
    client_id: "your-client-id",
    redirect_uri: "https://your-app/callback",
    scope: "openid profile", // 需包含声明所属的Scope
    // 其他配置项
};

若声明属于自定义Scope,需先在服务器注册该Scope并关联声明:

services.AddOpenIddict()
    .AddServer(options =>
    {
        options.RegisterScopes("openid", "profile", "tenant");
    });

// 添加声明时关联Scope
identity.AddClaim("tenantid", user.TenantId.ToString(), 
    OpenIddictConstants.Destinations.AccessToken)
    .SetClaimScope("tenant");

排查声明过滤逻辑

检查是否有自定义的ClaimsPrincipalHandler误删了声明:

// 若使用了自定义处理器,确保未移除目标声明
services.AddOpenIddict()
    .AddServer(options =>
    {
        options.AddClaimsPrincipalHandler<CustomClaimsPrincipalHandler>();
    });

验证令牌内容

用JWT解析工具(如本地调试或离线解析器)查看返回的Id Token/AccessToken,确认声明是否已写入令牌:

  • 若令牌中无声明:回到服务器端检查声明添加逻辑
  • 若令牌中有但前端无法获取:检查Angular OIDC-Client的令牌解析配置,确保未过滤自定义声明

内容的提问来源于stack exchange,提问作者jit-dev

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 15:35:08