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

.NET Core 6自定义认证方案中如何命令式验证AAD令牌

.NET Core 6 自定义认证集成AAD令牌验证方案解答

疑问解答

  • 关于命令式调用AAD验证方法:存在可直接在HybridAuthenticationHandler中调用的命令式验证方法。你不需要把AAD验证逻辑注册为全局自动执行的认证步骤,完全可以在自定义判断分支中手动触发AAD令牌校验。最简便的方式是复用Microsoft.Identity.Web封装的JWT验证服务:单独给AAD验证分配独立的认证Scheme,在代码中通过HttpContext调用对应Scheme的认证方法即可拿到验证结果,该调用是完全受控的命令式执行,可以直接放在你的||判断条件中。你也可以自行实例化JsonWebTokenHandler,配合配置中的AAD颁发者、受众、签名密钥等参数手写验证逻辑,但复用官方封装服务可以自动处理元数据刷新、密钥滚动等边缘场景,稳定性更高。
  • 关于链式调用AddMicrosoftIdentityWebApi的影响:直接在现有AddScheme后链式调用该方法会破坏你的自定义认证逻辑,不会自动实现回退效果。官方默认写法是为全应用仅使用AAD认证的场景设计的,它内部会注册JwtBearer认证Scheme,同时将全局默认认证Scheme修改为AAD使用的Bearer Scheme,直接导致你自定义的HybridAuthenticationHandler不会被默认触发,无法满足多方式回退的需求,不建议直接使用该写法。

正确实现步骤

  • 服务注册阶段保留自定义认证为默认Scheme,单独注册AAD认证服务并指定独立Scheme名,避免配置冲突:
// 原有自定义认证注册保持不变,默认Scheme依旧是Hybrid方案
services.AddAuthentication(HybridAuthenticationDefaults.AuthenticationScheme)
    .AddScheme<HybridAuthenticationOptions, HybridAuthenticationHandler>(
        HybridAuthenticationDefaults.AuthenticationScheme, 
        options => { });

// 单独注册AAD认证服务,指定独立Scheme名,不修改默认认证配置
services.AddAuthentication()
    .AddMicrosoftIdentityWebApi(Configuration.GetSection("AzureAd"), jwtBearerScheme: "AadJwtBearer");
  • 在HybridAuthenticationHandler的验证逻辑中,前两个验证分支都失败时,手动调用AAD Scheme的验证作为回退判断:
bool aadValidationPassed = false;
try
{
    var aadAuthResult = await Context.AuthenticateAsync("AadJwtBearer");
    aadValidationPassed = aadAuthResult.Succeeded;
}
catch
{
    // 可按需添加错误日志,AAD验证失败不影响其他两个分支的判断结果
    aadValidationPassed = false;
}

if (await this.ValidateNonAADToken(httpRequestMessage, SignedRequestScope) ||
    this.ValidateCertificate(this.Context) ||
    aadValidationPassed) 
{
    // 身份验证通过,构造对应认证票据返回即可
}

注意事项

  • 手动调用AuthenticateAsync("AadJwtBearer")只会触发对应AAD认证Handler的令牌验证逻辑,不会执行全局认证管道的其他流程,不会干扰现有认证逻辑。
  • 给AAD认证单独指定Scheme名是为了避免和现有路由、授权配置冲突,不要依赖默认的Bearer Scheme名,防止后续其他组件注册同名Scheme导致异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 03:39:31