我们一直在尝试关注this Power BI article,以便我们可以在SaaS产品中嵌入报告/信息中心。具体来说,我们陷入了第3步,“创建嵌入令牌”。
我们能够很好地获得持有人令牌但是当检索报告的请求最终提交给我们收到的API时:操作返回了无效的状态代码'禁止'
private static string clientId = "...";
private static string secretKey = "...";
private static string groupId = "...";
static void Main(string[] args)
{
string resourceUri = "https://analysis.windows.net/powerbi/api";
string authorityUri = "https://login.windows.net/common/oauth2/authorize";
ClientCredential credential = new ClientCredential(clientId, secretKey);
AuthenticationContext authContext = new AuthenticationContext(authorityUri);
var token = authContext.AcquireTokenAsync(resourceUri, credential).Result.AccessToken;
var tokenCredentials = new TokenCredentials(token, "Bearer");
using (var client = new PowerBIClient(new Uri("https://api.powerbi.com/"), tokenCredentials))
{
var reports = client.Reports.GetReportsInGroupWithHttpMessagesAsync(groupId);
// !!! - Here's where the exception is thrown
// !!! -- Operation returned an invalid status code 'Forbidden'
var report = reports.Result.Body;
}
}
以下是我们尝试过的内容:
答案 0 :(得分:3)
您正在使用客户端凭据流获取Power BI API的令牌。目前,Power BI REST API仅支持委派权限,但不支持任何应用程序权限。因此您的访问令牌访问不足。要使用Power BI,身份验证需要基于特定用户。相关帖子here和here仅供参考。
根据您的document,该方案是app拥有对数据的访问权限。用户不一定是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);
请参阅Authenticate users and get an Azure AD access token for your Power BI app并查看Access token for non-Power BI users (app owns data)
部分。
答案 1 :(得分:0)
我们发现该组(App Workspace)需要由使用Azure进行身份验证的同一用户拥有。此用户还需要在您注册的Azure应用程序中列为所有者。一旦修改了权限。不要忘记重新发布powerbi报告,然后才会反映变化。
答案 2 :(得分:0)
从Power BI获取真实异常的最好方法是添加mypthon\Scripts\activate
并查看消息的标题/正文。
https://github.com/Microsoft/PowerBI-CSharp/compare/master...mikeblakeuk:feature/exceptionHandler
答案 3 :(得分:0)