如何在请求头携带多个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
相关产品推荐
相关产品推荐

