我们有一个带身份验证的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工作室,所以问题必须在我的代码中。
答案 0 :(得分:1)
解决方案实际上非常简单。