Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过AAS多维数据集的API验证AAD用户_C#_Azure_Azure Analysis Services - Fatal编程技术网

C# 通过AAS多维数据集的API验证AAD用户

C# 通过AAS多维数据集的API验证AAD用户,c#,azure,azure-analysis-services,C#,Azure,Azure Analysis Services,我们有一个带有身份验证的AAS OLAP多维数据集,并希望为当前通过API查询它的AAD用户提供该多维数据集 目前Azure为我们的web API处理身份验证。我们基本上勾选了Azure门户中Azure AD启用的身份验证 按照建议,授权在多维数据集本身中。这意味着我必须以某种方式向Azure广告用户提供它 我已经研究了找到的模拟程序类,但这可能只适用于Windows上下文。我也调查过,但这需要使用应用程序id和应用程序机密,根据我对它的基本知识,这会破坏目的 我尝试了ADOMD.NET,并将令

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

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

按照建议,授权在多维数据集本身中。这意味着我必须以某种方式向Azure广告用户提供它

我已经研究了找到的模拟程序类,但这可能只适用于Windows上下文。我也调查过,但这需要使用应用程序id和应用程序机密,根据我对它的基本知识,这会破坏目的

我尝试了ADOMD.NET,并将令牌和用户id添加到连接字符串中,如前所述。但随后我收到以下错误:“调用的目标引发了异常。联邦服务返回错误: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}");
有人能给我指出正确的方向吗


编辑:使用该包时,我收到以下错误:“调用目标已引发异常;解析\u wstrust\u response\u失败:解析WS-Trust response失败”。我可以连接DAX studio,因此问题一定出在我的代码中。

解决方案实际上非常简单

  • 遵循此处找到的示例项目:。但不是连接到Graph API,而是连接到AAS多维数据集。因此,获取代表令牌的ResourceId应设置为“”,其中数据中心是您的AAS的位置,例如西欧
  • 将连接字符串设置为:“Provider=MSOLAP;数据源=asazure://datacenter.asazure.windows.net/nameofyourserver;初始目录=多维数据集的名称;用户ID=;密码=onBehalfOfToken;持久安全信息=True;模拟级别=模拟”。将用户ID保留为空。将密码设置为从AcquireTokenAsync()获取的代表令牌
  • 使用官方NuGet软件包:Microsoft.AnalysisServices.AdomdClient.retail.amd64

  • @GregGalloway v4.0_13.0.0.0__89845dcd8080cc91我收到错误:“连接字符串无效;输入字符串格式不正确。”。对于v4.0_15.0.0.0_89845dcd8080cc91,我收到了与上面相同的错误:“调用目标引发了异常。返回错误的联邦服务:ID3242:无法验证或授权安全令牌。”。