Azure 连接到电源BI API时收到“禁止(403)”信号

Azure 连接到电源BI API时收到“禁止(403)”信号,azure,azure-active-directory,powerbi,powerbi-embedded,Azure,Azure Active Directory,Powerbi,Powerbi Embedded,我们一直在努力跟进,以便在SaaS产品中嵌入报表/仪表板。具体来说,我们停留在第3步“创建嵌入令牌” 我们可以很好地获得一个承载令牌,但当检索报告的请求最终提交给我们收到的API时:操作返回了一个无效的状态代码“禁止” 以下是我们尝试过的: 已授予所需的权限。我们已全部检查,以确保没有遗漏任何内容。这包括Windows Azure Active Directory/Power BI服务。 我们已确认客户端ID、密钥和组ID是正确的。 Power BI工作空间是私人的,但我们已经尝试过创建一个公共

我们一直在努力跟进,以便在SaaS产品中嵌入报表/仪表板。具体来说,我们停留在第3步“创建嵌入令牌”

我们可以很好地获得一个承载令牌,但当检索报告的请求最终提交给我们收到的API时:操作返回了一个无效的状态代码“禁止”

以下是我们尝试过的:

已授予所需的权限。我们已全部检查,以确保没有遗漏任何内容。这包括Windows Azure Active Directory/Power BI服务。 我们已确认客户端ID、密钥和组ID是正确的。 Power BI工作空间是私人的,但我们已经尝试过创建一个公共空间,以确保它不重要。 最后,我们通过代码接收的令牌与powerbi.com上的令牌匹配。
您正在使用客户端凭据流为Power BI API获取令牌。目前,Power BI REST API仅支持委派权限,但不支持任何应用程序权限。因此,您的访问令牌无法获得足够的访问权限。要使用Power BI,身份验证需要基于特定用户。相关的线程和线程供您参考

根据您的描述,情况是应用程序拥有对数据的访问权。用户不一定是Power BI用户,应用程序控制最终用户的身份验证和访问。然后,您可以使用资源所有者流来获取令牌

此示例可在的Controllers\HomeController.cs中找到

从代码示例中,它是使用用户密码凭据(而不是应用程序的凭据)访问令牌:

            // Create a user password cradentials.
            var credential = new UserPasswordCredential(Username, Password);

            // Authenticate using created credentials
            var authenticationContext = new AuthenticationContext(AuthorityUrl);
            var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);

请参阅并检查非Power BI用户应用程序拥有数据部分的访问令牌。

我们发现,组应用程序工作区需要由使用Azure进行身份验证的同一用户拥有。此用户还需要列为您注册的Azure应用程序的所有者。一旦您修改了权限。不要忘记重新发布powerbi报告,只有它反映了更改。

从powerbi获取真正异常的最佳方法是添加一个DelegatingHandler并查看消息的标题/正文


这是因为您正试图使用SPN身份验证调用我的工作区中的某些报告/仪表板。目前,这是已知的SPN限制


谢谢你,南宇,不过,这与我在样本中获得的完全相同。我尝试了您之前建议的示例,但收到一个错误请求正文必须包含以下参数:“client\u secret或client\u assertion”。在线建议建议创建“本机应用程序”,但这也给我留下了一个未经授权的错误。我们只能使用来自本机客户端的资源所有者流。机密客户端(如网站)不能使用直接用户凭据。当您收到未经授权的错误时,详细的错误消息是什么?谢谢。我们与一位微软代表进行了交谈,并为我们更详细地解释了上述内容。我们必须使用本机客户端应用程序,而不是教程中说明的web应用程序。非常令人困惑,但它似乎有效。让我们恼火的是,在注册应用程序时,上面写着原生桌面/手机/等等。谢谢你提供的信息。但在您所指的链接中,有一节指出,可以使用服务原则访问令牌,这意味着无需用户登录。不是吗?因此,这意味着应该能够在不提供用户/pwd而是客户机凭据的情况下获得嵌入令牌。许多power bi文档都说明了这一点。我写这篇文章的原因是,我在尝试通过Power Bi REST API获取嵌入令牌时,403也失败了。
            // Create a user password cradentials.
            var credential = new UserPasswordCredential(Username, Password);

            // Authenticate using created credentials
            var authenticationContext = new AuthenticationContext(AuthorityUrl);
            var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);