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

如何在请求头携带多个AuthenticationScheme令牌实现跨WebAPI双认证

双令牌传递与校验解决方案

1. 服务A请求头配置

推荐使用独立头分存令牌的方案,兼容性更高,不会被网关、防火墙误拦截:
在你的HttpClientHelper中按如下方式配置请求头:

// IDS4用户令牌走标准Authorization头
httpClient.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", ids4UserToken);
// AAD应用令牌存入自定义头
httpClient.DefaultRequestHeaders.Add("X-AAD-App-Token", $"Bearer {aadAppToken}");

2. 服务B认证方案适配

修改服务B中AAD认证方案的令牌读取逻辑,让它从自定义头取令牌即可,无需改动现有IDS4的认证配置:

.AddJwtBearer("AAD_Authentication", opt =>
{
    opt.Audience = Configuration["AAD:ResourceId"];
    opt.Authority = $"{Configuration["AAD:InstanceId"]}{Configuration["AAD:TenantId"]}";
    opt.RequireHttpsMetadata = true;
    // 新增自定义令牌读取逻辑
    opt.Events = new JwtBearerEvents
    {
        OnMessageReceived = context =>
        {
            if (context.Request.Headers.TryGetValue("X-AAD-App-Token", out var aadToken))
            {
                context.Token = aadToken.ToString().Replace("Bearer ", "", StringComparison.OrdinalIgnoreCase);
            }
            return Task.CompletedTask;
        }
    };
})

3. 现有逻辑兼容说明

你之前配置的多认证方案策略、控制器[Authorize]标注无需修改,两套JWT认证逻辑会分别校验对应令牌,校验通过后两个令牌的Claims会自动合并到当前请求的ClaimsPrincipal中,你自定义的MyPolicy可以直接读取两类身份的所有声明做权限判断。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 06:39:02