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

如何配置Web API安全规则以验证客户端应用生成的OpenID Token?

Web API 项目Azure AD Token校验配置步骤

你使用Azure AD作为身份提供商,API端需要配置JWT Bearer认证来校验传入的访问令牌,具体操作如下:

  • 第一步:安装必要NuGet包
    首先在API项目中安装Microsoft.AspNetCore.Authentication.JwtBearer包,版本要和你的项目.NET版本匹配。
  • 第二步:添加配置项
    在API项目的appsettings.json中添加Azure AD相关配置:
    "AzureAd": {
      "TenantId": "你的Azure AD租户ID",
      "Audience": "你的API在Azure AD中注册的客户端ID",
      "Authority": "https://login.microsoftonline.com/你的Azure AD租户ID"
    }
    
  • 第三步:配置认证服务
    如果是.NET 6+的Program.cs,添加如下配置:
    builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = builder.Configuration["AzureAd:Authority"];
            options.Audience = builder.Configuration["AzureAd:Audience"];
            options.TokenValidationParameters = new TokenValidationParameters
            {
                // 校验签发者,确保是Azure AD签发的令牌
                ValidateIssuer = true,
                ValidIssuer = builder.Configuration["AzureAd:Authority"],
                // 校验受众,确保令牌是发给当前API的
                ValidateAudience = true,
                ValidAudience = builder.Configuration["AzureAd:Audience"],
                // 校验令牌有效期
                ValidateLifetime = true,
                // 校验签名密钥,中间件会自动从Azure AD拉取公开签名密钥
                ValidateIssuerSigningKey = true
            };
        });
    // 注册授权服务
    builder.Services.AddAuthorization();
    
    如果是.NET Core 3.1及更早版本的Startup.cs,在ConfigureServices方法中添加:
    services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
        .AddJwtBearer(options =>
        {
            options.Authority = Configuration["AzureAd:Authority"];
            options.Audience = Configuration["AzureAd:Audience"];
            options.TokenValidationParameters = new TokenValidationParameters
            {
                ValidateIssuer = true,
                ValidIssuer = Configuration["AzureAd:Authority"],
                ValidateAudience = true,
                ValidAudience = Configuration["AzureAd:Audience"],
                ValidateLifetime = true,
                ValidateIssuerSigningKey = true
            };
        });
    services.AddAuthorization();
    
  • 第四步:配置中间件管道
    注意中间件的顺序不能乱,要先启用认证再启用授权:
    .NET 6+ Program.cs:
    // 放在UseRouting之后,UseAuthorization之前
    app.UseAuthentication();
    app.UseAuthorization();
    
    .NET Core 3.1 Startup.cs的Configure方法:
    app.UseRouting();
    app.UseAuthentication();
    app.UseAuthorization();
    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });
    
  • 第五步:接口加授权校验
    在需要保护的控制器或者Action上添加[Authorize]特性即可,接口收到请求时会自动校验请求头中Authorization: Bearer <token>里的令牌有效性,校验失败会返回401状态码。

注意:你当前客户端配置里的Resource是Graph的URI,如果你要调用自己的Web API,需要修改客户端配置,请求的scope要替换成你自己API暴露的scope,否则拿到的令牌受众是Graph,不是你的API,会校验失败。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 16:18:02