1

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

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

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

我查看了此处找到的 Impersonator 类,但这可能仅适用于 Windows 上下文。我也研究过这个问题,但这需要使用应用程序 ID 和应用程序秘密,根据我的基本知识,这将破坏目的。

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

这是我用来测试 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}");

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

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

4

1 回答 1

1

解决这个问题其实很简单。

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