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

实现Power BI对接.NET 6 WebAPI的身份验证流程

.NET 6 Azure AD认证API在Power BI中调用的配置问题排查

问题场景

我基于.NET 6开发的Web API部署在Azure App Service,已配置Azure AD企业应用和应用注册,支持组织内用户认证。React前端调用一切正常,但Power BI调用API时出现认证错误。

初始错误与第一次调整

最初的认证配置:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
                .AddMicrosoftIdentityWebApi(builder.Configuration.GetSection("AzureAd"));

此时Power BI登录时提示:

We were unable to connect because this credential type isn't supported for this resource. Please choose another credential type.

我判断是未认证请求未返回正确的WWW-Authenticate头,于是添加了OnChallenge事件来返回authorization_uri:

builder.Services.AddAuthentication(JwtBearerDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApi(options =>
{
    builder.Configuration.Bind("AzureAd", options);

    options.Events = new JwtBearerEvents
    {
        OnChallenge = async context =>
        {
            context.HttpContext.Response.StatusCode = 401;
            context.HttpContext.Response.Headers.Add("WWW-Authenticate", $"Bearer authorization_uri=\"https://login.microsoftonline.com/{TENANT_ID}/oauth2/authorize?client_id={APP_ID}\"");
        }
    };
},
    options => { builder.Configuration.Bind("AzureAd", options); }
);

新错误:AADSTS500011

调整后Power BI抛出新错误:

invalid_resource: AADSTS500011: The resource principal named https://{WEBAPI_URL}.azurewebsites.net was not found in the tenant named {TENANT NAME}. This can happen if the application has not been installed by the administrator of the tenant or consented to by any user in the tenant. You might have sent your authentication request to the wrong tenant.

实际应用已部署,管理员也完成了企业应用安装,但问题依旧,需要排查以下配置:


排查与修复步骤

  1. 核对API应用注册的标识符

    • 登录Azure门户,找到API对应的应用注册,检查应用程序ID URI是否为https://{WEBAPI_URL}.azurewebsites.net。Power BI请求中的resource参数必须和这个值完全匹配。
    • 如果之前用客户端ID作为audience,要么在Power BI连接时指定客户端ID为资源,要么在应用注册的“公开API”页面添加https://{WEBAPI_URL}.azurewebsites.net作为有效标识符。
  2. 确认企业应用(服务主体)状态

    • 在Azure AD的企业应用中,搜索API应用注册的名称或客户端ID,确认服务主体存在。如果不存在,回到应用注册页面,重新授予管理员同意触发服务主体创建。
    • 检查应用注册的“API权限”页面,确保管理员已同意所需权限(至少包含默认的User.Read)。
  3. 修正API的Audience配置

    • 打开appsettings.json,确保AzureAd节的Audience值与应用注册的标识符一致:
      "AzureAd": {
          "Instance": "https://login.microsoftonline.com/",
          "TenantId": "{你的租户ID}",
          "ClientId": "{API的应用ID}",
          "Audience": "https://{WEBAPI_URL}.azurewebsites.net"
      }
      
    • 这个值必须和Power BI请求的resource完全匹配,否则JWT验证会失败。
  4. 完善OnChallenge事件的授权URI

    • 当前的authorization_uri缺少resource参数,Power BI需要明确知道要请求哪个资源的令牌,修改头信息:
      context.HttpContext.Response.Headers.Add("WWW-Authenticate", $"Bearer authorization_uri=\"https://login.microsoftonline.com/{TENANT_ID}/oauth2/authorize?client_id={APP_ID}&resource=https://{WEBAPI_URL}.azurewebsites.net\"");
      
    • 确保resource值和应用注册的标识符一致。
  5. 检查Power BI连接设置

    • 在Power BI连接API时,选择OAuth2认证方式,输入的资源URL必须和API应用注册的标识符完全一致。如果用客户端ID作为资源,就填客户端ID而非API的URL。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.28 18:50:34