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

.NET Core 5中MVC管道如何验证AzureAD OIDC并获取用户声明

核心问题定位

你当前使用的AddOpenIdConnect中间件不适用于纯后端API场景:该中间件是为带前端交互的Web应用设计的,用于处理跳转到Azure AD的登录、回调流程,不会自动解析请求头中携带的Bearer令牌,所以你获取到的用户声明始终为空。纯后端API验证OIDC令牌应该使用JWT Bearer认证中间件。

修改步骤

1. 安装依赖包

先安装对应.NET版本的JWT Bearer认证包:

Install-Package Microsoft.AspNetCore.Authentication.JwtBearer

2. 调整ConfigureServices配置

替换原有认证配置,示例如下:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddJwtBearer(options =>
    {
        // 配置Azure AD的元数据地址,单租户场景替换{租户ID}为你的Azure AD租户ID
        options.Authority = "https://login.microsoftonline.com/{租户ID}/v2.0";
        // 配置受众校验,确保令牌是发给你的应用的
        options.TokenValidationParameters = new TokenValidationParameters
        {
            ValidateIssuer = true,
            ValidIssuer = "https://login.microsoftonline.com/{租户ID}/v2.0",
            ValidateAudience = true,
            ValidAudience = azureAdConfig.ClientId,
            ValidateLifetime = true
        };
        // 可选:添加事件监听方便调试问题
        options.Events = new JwtBearerEvents
        {
            OnAuthenticationFailed = context =>
            {
                // 这里可以打断点看认证失败的具体原因,比如令牌过期、签名错误等
                return Task.CompletedTask;
            },
            OnTokenValidated = context =>
            {
                // 令牌校验通过后会触发这里,此时已经可以拿到用户声明
                return Task.CompletedTask;
            }
        };
    });

3. 确认中间件顺序

你当前Configure方法中的中间件顺序是正确的,只要保证UseAuthentication在UseAuthorization之前、路由匹配之后、端点映射之前即可:

Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    // ... 其他配置 比如异常处理、静态文件、路由
    app.UseRouting(); // 必须在UseAuthentication之前
    app.UseAuthentication();
    app.UseAuthorization();
    // ... 端点映射 比如UseEndpoints
}

4. 请求格式校验

确保客户端调用接口时,请求头携带的Authorization字段格式正确:
Authorization: Bearer <你的Azure AD颁发的JWT令牌>

配置完成后,在OnAuthorizationAsync中就可以通过context.HttpContext.User.Claims正常获取用户声明了。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 18:27:03