Microsoft.AnalysisServices.AdomdClient 在 .Net Core 应用程序中不起作用(身份验证问题)



我在使用Microsoft.AnalysisServices.AdomdClient.NetCore.retail时遇到了问题。.

有趣的事实:同样的代码在。net 4.7.2应用程序中工作得很好,但在。net Core(目前我正在测试。net 5版本)中失败。

该应用程序具有Windows认证(IIS express),并使用连接字符串与集成安全=SSPI参数分析服务。在connection。open()方法中,我得到一个

身份验证异常
无法使用提供的凭据获取身份验证令牌。内部异常:"MsalServiceException":在url返回的联邦服务

错误。代码:

Startup.cs
services.AddAuthentication(IISDefaults.AuthenticationScheme);

控制器私有方法:

private DataTable GetData(string connectionString, string databaseName, string daxQuery, 
Dictionary<string, string> parameters)
{
var dt = new DataTable();
using(var conn = new AdomdConnection(connectionString))
{
//fails here
conn.Open();
conn.ChangeDatabase(databaseName);
using(vad cmd = new AdomdCommand(daxQuery, conn))
{
if(parameters.Any())
{
foreach(var param in parameters)
{
cmd.Parameters(param.Key, param.Value);
}
}
using (var adapter = AdomDataAdapter(cmd))
{
adapter.Fill(dt);
}
}

return dt;
}
}

:我已经在控制台应用程序中尝试了相同的代码。

。Net 4.7.2应用程序正常运行

。Net 4失败,出现不同的错误:

AcquireTokenByIntegratedWindowsAuth不支持在。net core没有添加。withusername(),因为MSAL不能确定当前登录用户的用户名(UPN)。请在调用ExecuteAsync()之前使用。withusername()。详细信息请参见https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Integrated-Windows-Authentication

似乎。net核心版本无法获得用户名并使用它来获得Azure令牌用于分析服务认证。此外,如果我使用MSAL库来获取令牌,则不清楚如何将令牌与AdomdClient库一起使用。

我已经给图书馆老板写了信,但是没有得到任何回应。

经过调查,我发现microsoft.analysisservices . adomdclient.netcore.retail.net。Amd64有一些隐藏的依赖。如果您将Microsoft.Identity.Client nuget包添加到项目中,它将像预期的那样工作。

另一个可能的解决方案-不使用AdomdClient,使用OleDb连接:

using (var con = new OleDbConnection(connectionString))
{
con.Open();
con.ChangeDatabase(databaseName);
using (var cmd = new OleDbCommand(query, con))
{
using (OleDbDataAdapter adapter = new OleDbDataAdapter(cmd))
{
// Here we should increase timeout because DAX query execution can be bigger than default 30 seconds
adapter.SelectCommand.CommandTimeout = _timeoutInSeconds;
adapter.Fill(dt);
}
}
return dt;
}

OleDb工作得很好,你可以查询表格模型没有问题。

最新更新