通过API向AAS多维数据集

时间:2018-04-04 13:37:21

标签: c# azure azure-analysis-services

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

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

根据建议,授权位于多维数据集本身。这意味着我必须以某种方式为Azure AD用户提供它。

我查看了here发现的Impersonator类,但这可能只适用于Windows上下文。我也研究了this issue,但这需要使用app id和app secret,这会根据我对它的基本知识来破坏目的。

我尝试过ADOMD.NET,并将令牌和用户ID添加到连接字符串中,如here所述。但后来我收到以下错误:“调用目标抛出了异常。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}");

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

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

1 个答案:

答案 0 :(得分:1)

解决方案实际上非常简单。

  1. 按照此处找到的示例项目:https://github.com/Azure-Samples/active-directory-dotnet-webapi-onbehalfof。但是,您不是连接到Graph API,而是连接到AAS多维数据集。因此,代表令牌的ResourceId应设置为“https://datacenter.asazure.windows.net”,其中数据中心是您的AAS的位置,例如westeurope。
  2. 设置连接字符串:“提供者= MSOLAP;数据源= asazure://datacenter.asazure.windows.net/nameofyourserver;初始目录= nameofyourcube;用户ID =;密码= onBehalfOfToken;持续安全信息= TRUE;假冒等级=冒充“。将用户ID留空。将密码设置为代表您从AcquireTokenAsync()获得的令牌。
  3. 使用官方NuGet包:Microsoft.AnalysisServices.AdomdClient.retail.amd64。