【发布时间】:2021-10-31 02:12:45
【问题描述】:
我在 .Net Core Web API 应用程序中使用 Microsoft.AnalysisServices.AdomdClient.NetCore.retail.amd64 库时遇到问题。
有趣的事实:相同的代码在 .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 失败并出现不同的错误:
在不添加 .WithUserName() 的情况下,.net 核心不支持 AcquireTokenByIntegratedWindowsAuth,因为 MSAL 无法确定当前登录用户的用户名 (UPN)。请在调用 ExecuteAsync() 之前使用 .WithUserName()。更多详情见https://github.com/AzureAD/microsoft-authentication-library-for-dotnet/wiki/Integrated-Windows-Authentication
.net core 版本似乎无法获取用户名并使用它来获取 Azure 令牌以进行分析服务身份验证。此外,如果我使用 MSAL 库来获取令牌,则不清楚如何将令牌与 AdomdClient 库一起使用。
我已经写信给图书馆所有者,但没有得到任何回复。
【问题讨论】:
标签: c# authentication .net-core ssas