Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
Azure active directory 如何使用基于令牌的标识RLS将多租户AAD单页web应用程序与嵌入的Power BI集成_Azure Active Directory_Powerbi_Azure Sql Database_Powerbi Embedded_Rls - Fatal编程技术网

Azure active directory 如何使用基于令牌的标识RLS将多租户AAD单页web应用程序与嵌入的Power BI集成

Azure active directory 如何使用基于令牌的标识RLS将多租户AAD单页web应用程序与嵌入的Power BI集成,azure-active-directory,powerbi,azure-sql-database,powerbi-embedded,rls,Azure Active Directory,Powerbi,Azure Sql Database,Powerbi Embedded,Rls,我们正在尝试支持一个场景,它是以下内容的组合: 。所有租户的数据都在一个实例中 嵌入式Power BI报告基于对Azure SQL实例的直接查询,使用基于令牌的标识RLS,如所示 我们希望用户在我们的SPA上只登录一次,之后他应该能够看到嵌入的Power BI报告,其中只包含他应该看到的数据(RLS) 我们倾向于认为这两个概念是不可组合的,但我们希望这是错误的,希望这里的人能够纠正 简言之,我们的考虑是: 要支持“在一个DB实例中使用所有租户数据的多租户SPA”,我们必须使用/common权限

我们正在尝试支持一个场景,它是以下内容的组合:

  • 。所有租户的数据都在一个实例中
  • 嵌入式Power BI报告基于对Azure SQL实例的直接查询,使用基于令牌的标识RLS,如所示
  • 我们希望用户在我们的SPA上只登录一次,之后他应该能够看到嵌入的Power BI报告,其中只包含他应该看到的数据(RLS)

    我们倾向于认为这两个概念是不可组合的,但我们希望这是错误的,希望这里的人能够纠正

    简言之,我们的考虑是:

    • 要支持“在一个DB实例中使用所有租户数据的多租户SPA”,我们必须使用/common权限。因此,登录用户是租户的AAD身份
    • 为了支持“使用基于令牌的标识RLS嵌入的Power BI”,并因此在DB级别上应用RLS,我们需要相应的用户成为DB用户。但每个基于AAD的用户必须是DB租户(=ISV租户)中的(来宾)用户。此用户是我们(ISV)AAD租户中的一个身份,而不是租户自己的AAD租户
    因此,如果没有办法将用户从1)映射到2)的用户,那么我们就看不到一种方法可以让这两者协同工作。我也不知道我们如何代表身份验证来实现这一点

    我们实际构建了场景,我们发现:

    • 当使用/common作为SPA的登录权限时,我们在Power BI报告中收到以下错误消息:
    “无法加载此用户的可视登录的数据失败 ''..该异常是由 IDB连接接口。”

    • 只有当我们将SPA的登录权限设置为ISV的租户时,我们才能得到一份正确嵌入的电力BI报告,并应用相应的RL。但是,这不是一个选项,因为这样我们就不能再支持“在一个DB实例中使用所有租户数据的多租户SPA”场景了
    MS的支持案例实际上没有帮助,因为他们的回答基本上是这样的:

    行为如预期,请参见下面的解释和建议

    所描述的场景如预期所示:

    该场景是使用单点登录的SQL Azure访问(即使用终端 访问SQL Azure数据库的用户标识)

    最终用户是ISV租户中的来宾

    当登录完成时 用户的令牌将是ISV租户的B2B令牌,这是一个 如果B2B访问被正确配置为 在总结中描述

    否则,当登录到 'https://login.microsoftonline.com/common/ 用户的令牌将是 授予用户家庭租户访问权限的常规AAD令牌,无效 用于SQL数据库访问

    建议:

  • 如果所有最终用户都被授予对ISV租户和ISV数据库的来宾访问权限,则这不是一个正确的多租户解决方案,而是 而是一个单一租户B2B解决方案和登录应该保持不变

  • 如果情况并非如此,并且用户希望使用多租户应用程序,则应使用有效的SQL访问令牌生成嵌入令牌,如下所示: 标识blob(即,不是用户的AAD令牌,因为它是 仅限用户的租户)。考虑使用代理身份验证来获得 有效的SQL访问令牌:


  • 虽然我们知道他们为什么说“它按预期工作”——但这并不能解决上面描述的问题。此外,我们也看不到代表身份验证方法在这里有什么帮助。

    Hmm,不是这一特定场景的专家,但RLS访问很可能会分配给租户中的来宾用户,对吗?或者可以将它们分配给租户中的用户吗?这里重要的一点是,他们的家庭租户中的用户与您的租户中的来宾用户不是同一个用户。