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

如何为.NET Core Web API实现Azure AD认证,支持带/不带用户上下文的多客户端调用

解决方案

该需求完全可实现,你遇到的问题由两部分配置缺失导致:Azure AD端应用权限配置错误、Web API端授权策略未兼容应用身份校验,具体修复步骤如下:

1. 修复Azure AD端配置(解决令牌缺声明问题)

你看到的IDW10201报错是因为客户端凭证流返回的令牌中没有有效roles或scope声明,客户端凭证流使用应用权限而非授权码流的委托权限,需按如下配置:

  • 进入Web API对应的Azure AD应用注册页,打开「应用权限」tab,点击「添加权限」-「我的API」,选中当前Web API,切换到「应用权限」分类,新增自定义应用权限(例如命名为AccessAsApplication)并保存。
  • 进入第三方客户端对应的Azure AD应用注册页,打开「应用权限」tab,添加上一步新建的Web API应用权限,点击「授予管理员同意」完成授权。
  • 请求令牌时,scope参数固定填写为api://<Web API客户端ID>/.default,grant_type固定为client_credentials,此时拿到的令牌解析后会包含roles声明,值为你定义的AccessAsApplication。

注意:客户端凭证流的令牌权限属于应用级别,泄露会导致Web API被非法访问,需严格管控第三方客户端的client secret存储、权限范围,避免授予过高权限。

2. 调整Web API代码配置

2.1 兼容应用权限校验

修改AddMicrosoftIdentityWebApi配置,关闭仅允许委托权限校验的默认限制,解决IDW10201报错:

services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
    .AddMicrosoftIdentityWebApi(
        jwtOpt => 
        {
            jwtOpt.TokenValidationParameters.ValidAudiences = new List<string> { "api://<你的Web API客户端ID>" };
        },
        identityOpt => 
        {
            // 允许通过应用权限(角色)授权,不再强制要求scope声明
            identityOpt.AllowWebApiToBeAuthorizedByACL = true;
        }
    );

2.2 配置多场景授权策略

新增两类授权策略,分别适配SPA用户调用、第三方应用调用场景:

services.AddAuthorization(options =>
{
    // 适配原有SPA授权码流的策略:要求有用户角色声明
    options.AddPolicy("UserOnlyPolicy", policy =>
    {
        policy.RequireAuthenticatedUser();
        // 填入你原有给用户分配的角色值
        policy.RequireClaim("roles", "<原有用户角色值>");
    });

    // 适配客户端凭证流的策略:要求有应用权限声明
    options.AddPolicy("AppOnlyPolicy", policy =>
    {
        policy.RequireAuthenticatedUser();
        policy.RequireClaim("roles", "AccessAsApplication");
    });
});

2.3 控制器绑定对应策略

  • 原有面向SPA的控制器,添加[Authorize(Policy = "UserOnlyPolicy")]特性,确保必须有用户上下文才能访问。
  • 新增的面向第三方客户端的控制器,添加[Authorize(Policy = "AppOnlyPolicy")]特性,仅允许持有有效应用权限令牌的客户端访问。

如果你不需要对原有接口做额外角色校验,保留原有全局RequireAuthenticatedUser策略即可,两类请求只要完成身份认证都会自动放行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 07:48:01