gpt4 book ai didi

c# - 通过 AAS 多维数据集的 API 对 AAD 用户进行身份验证

转载 作者:行者123 更新时间:2023-12-03 03:00:12 25 4
gpt4 key购买 nike

我们有一个具有身份验证功能的 AAS OLAP 多维数据集,并希望将其提供给当前通过 API 查询它的 AAD 用户。

目前,Azure 处理我们 Web API 的身份验证。我们基本上在 Azure 门户中勾选了由 Azure AD 启用的身份验证。

正如建议的那样,授权位于多维数据集本身中。这意味着我必须以某种方式向 Azure AD 用户提供它。

我调查了 Impersonator 类,发现 here但这可能只适合 Windows 环境。我还调查过this issue但这需要使用应用程序 ID 和应用程序 key ,根据我的基本知识,这将达不到目的。

我已尝试 ADOMD.NET 并将 token 和用户 ID 添加到连接字符串中,如所述 here 。但随后我收到以下错误:“调用目标已引发异常。https://sts.blank.com/adfs/services/trust/13/usernamemixed 处的联合服务返回错误:ID3242:无法对安全 token 进行身份验证或授权。”。可能是我在这里将错误的声明插入到连接字符串中。我对此的了解有限。

这是我用来测试 ADOMD.NET 的测试代码:

string token = ClaimsPrincipal.Current.Claims.First(fod => fod.Type == "aio").Value;
string userId = ClaimsPrincipal.Current.Claims.First(fod => fod.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn").Value;

using (AdomdConnection conn = new AdomdConnection($"Data Source=asazure://blank.asazure.windows.net/blank;Initial Catalog=blank;user id={userId};password={token}"))
{
conn.Open();
StringBuilder result = new StringBuilder();
foreach (CubeDef cube in conn.Cubes)
{
result.AppendLine(cube.Name);

foreach (Dimension dim in cube.Dimensions)
{
result.Append("\t");
result.AppendLine(dim.Name);
}
}

conn.Close();
}

为了查询 OLAP 多维数据集,我还测试了 NuGet 包 LinqToDAX,因为这里没有人知道 DAX。但这给了我错误:“‘MSOLAP’提供程序未在本地计算机上注册。”。我不知道如何在 Azure 中注册此提供程序或如何向其传递凭据。由于之前的错误,我不确定通过简单地在连接字符串中输入值是否可以使用相同的方法。

这是我用来测试 LinqToDAX 的测试代码:

string token = ClaimsPrincipal.Current.Claims.First(fod => fod.Type == "aio").Value;
string userId = ClaimsPrincipal.Current.Claims.First(fod => fod.Type == "http://schemas.xmlsoap.org/ws/2005/05/identity/claims/upn").Value;
DbContextOlap dbContextOlap = new DbContextOlap($"Provider=MSOLAP;Data Source=asazure://blank.asazure.windows.net/blank;Initial Catalog=blank;user id={userId};password={token}");

有人能指出我正确的方向吗?

编辑:使用建议的包 here我收到以下错误:“调用目标已引发异常。;parsing_wstrust_response_failed:解析 WS-Trust 响应失败”。我可以连接 DAX studio,所以问题一定出在我的代码中。

最佳答案

这个问题的解决方案实际上非常简单。

  1. 按照此处找到的示例项目进行操作:https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof 。但您不是连接到 Graph API,而是连接到 AAS 多维数据集。因此,代表 token 获取的 ResourceId 应设置为“https://datacenter.asazure.windows.net ”,其中数据中心是您的 AAS 的位置,例如 westeurope。
  2. 将连接字符串设置为:“Provider=MSOLAP;Data Source=asazure://datacenter.asazure.windows.net/nameofyourserver;Initial Catalog=nameofyourcube;User ID=;Password=onBehalfOfToken;Persist Security Info=True;模拟级别=模拟”。将用户 ID 留空。将密码设置为从 AcquireTokenAsync() 获取的代表 token 。
  3. 使用官方 NuGet 软件包:Microsoft.AnalysisServices.AdomdClient.retail.amd64。

关于c# - 通过 AAS 多维数据集的 API 对 AAD 用户进行身份验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49652497/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com