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

.Net Core应用中Microsoft.AnalysisServices.AdomdClient认证失败问题咨询

.NET Core 下 AdomdClient 连接 Analysis Services 集成认证问题解决方案

问题根因

.NET Core 版本的 AdomdClient 底层依赖 MSAL 库实现 Windows 集成认证,MSAL 在 .NET Core 运行时下无法自动获取当前登录用户的用户主体名(UPN),导致内置的集成认证逻辑失效,而 .NET Framework 下的实现无此限制。

解决方案步骤

1. 调整连接字符串

移除原有连接字符串中的 Integrated Security=SSPI 配置,仅保留服务地址配置即可,示例:

Data Source=asazure://<区域>.asazure.chinacloudapi.cn/<你的AS实例名>;

2. 安装依赖包

安装 MSAL 官方 NuGet 包用于手动获取认证令牌:
Install-Package Microsoft.Identity.Client

3. 手动获取认证令牌

从 IIS Windows 认证上下文拿到当前用户的 UPN,调用 MSAL 接口获取访问令牌:

// 从控制器HttpContext中获取当前用户标识
var userName = HttpContext.User.Identity.Name;
// 转换域\用户名格式为UPN格式(如果返回的是域\账号格式)
if (userName.Contains("\\"))
{
    var domainPart = userName.Split('\\')[0];
    var accountPart = userName.Split('\\')[1];
    userName = $"{accountPart}@{domainPart}.com"; // 按企业实际域名后缀调整
}

// 构造MSAL客户端获取令牌
var app = PublicClientApplicationBuilder
    .Create("<你的应用客户端ID,Azure AS场景下可使用通用客户端ID:cf034d42-6b65-4ed4-9420-95991b4875c2>")
    .WithAuthority("https://login.microsoftonline.com/<你的租户ID>")
    .Build();
// 本地SSAS场景修改为对应服务的scope
var scopes = new[] { "https://*.asazure.chinacloudapi.cn/.default" };

var result = await app.AcquireTokenByIntegratedWindowsAuth(scopes)
    .WithUsername(userName)
    .ExecuteAsync();
var accessToken = result.AccessToken;

4. 传入令牌到AdomdConnection

调用 AdomdConnection 内置的 SetAccessToken 方法传入令牌,再执行打开连接操作,修复后的业务代码如下:

private DataTable GetData(string connectionString, string databaseName, string daxQuery, 
    Dictionary<string, string> parameters, string accessToken)
{
    var dt = new DataTable();
    using(var conn = new AdomdConnection(connectionString))
    {
        // 传入手动获取的令牌,替代内置认证逻辑
        conn.SetAccessToken(accessToken);
        conn.Open();
        conn.ChangeDatabase(databaseName);
        using(var cmd = new AdomdCommand(daxQuery, conn))
        {
            if(parameters.Any())
            {
                foreach(var param in parameters)
                {
                    cmd.Parameters.Add(param.Key, param.Value);
                }
            }
            using (var adapter = new AdomdDataAdapter(cmd))
            {
                adapter.Fill(dt);
            }
        }
        return dt;
    }
}

注意事项

  • 确保IIS配置中仅开启Windows身份认证,关闭匿名认证,否则无法获取当前登录用户的身份信息
  • 本地部署SSAS场景下,调整MSAL的权限范围、授权地址为对应本地ADFS配置即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 01:18:03