Powerbi 电源BI嵌入错误403来自服务器的禁止错误

Powerbi 电源BI嵌入错误403来自服务器的禁止错误,powerbi,powerbi-embedded,Powerbi,Powerbi Embedded,我正在遵循PowerBI社区中提到的步骤,并在Postman中进行测试,已经完成了前4个步骤。但是,在Microsoft Power BI Embedded Playway中测试嵌入代码时,我不断遇到以下错误: Json对象 { “消息”:“LoadReportFailed”, “detailedMessage”:“初始化失败-无法解析群集”, “错误代码”:“403”, “级别”:6, “技术细节”:{ “请求ID”:“57679585-022b-4871-ae6d-bb722d4a07cc”

我正在遵循PowerBI社区中提到的步骤,并在Postman中进行测试,已经完成了前4个步骤。但是,在Microsoft Power BI Embedded Playway中测试嵌入代码时,我不断遇到以下错误:

Json对象 { “消息”:“LoadReportFailed”, “detailedMessage”:“初始化失败-无法解析群集”, “错误代码”:“403”, “级别”:6, “技术细节”:{ “请求ID”:“57679585-022b-4871-ae6d-bb722d4a07cc” } }

另外,在尝试第5步中提供的HTML设置时,我再次遇到403错误:“GET 403(禁止)”


请帮忙。一个多星期以来,我一直在努力使这件事起作用

请确保您在授权标头中发送了正确的令牌。确保使用“承载人”作为授权标头


此外,请确保您的用户拥有所有必需的权限。

请确保您在授权标头中发送了正确的令牌。确保使用“承载人”作为授权标头


另外,请确保您的用户拥有所有必需的权限。

事实证明,尽管我有工作区ID、客户端ID和报表ID,而且我对API进行了正确的调用,但第五步中的错误是因为我是报表所在工作区的成员


要使API正常工作,您需要成为工作区的管理员,您正试图从中获取报告。事实证明,尽管我有工作区ID、客户端ID、报告ID,并且我对API进行了正确的调用,但第五步中的错误是因为我是报告所在工作区的成员


要使API正常工作,您需要成为工作区的管理员,您要从工作区中获取报告

我最后使用以下步骤解决了这个问题

要在前端嵌入power BI报告(angular/JS),您必须生成2个不同的令牌(仅适用于应用程序场景)

  • 使用主帐户详细信息/服务主体帐户访问令牌 (用于连接power BI服务器)
  • 嵌入令牌(可以使用访问令牌和.NET Power BI rest API生成)
  • 步骤1:访问令牌生成

    PBIClientId:“xxxxxx-xxxx-xxxx-xxxx-XXXXXXXX”,
    “PBIClientCret”:“,
    “PBIApiUrl”:https://api.powerbi.com/",
    “资源URL”:https://analysis.windows.net/powerbi/api",
    “AuthorityUrl”:https://login.windows.net/common/",
    “租户”:“,
    专用异步任务生成器PowerBiAccessToken()
    {
    var tenantspecificcurl=authorityUrl.Replace(“common”,tenantId);
    var authenticationContext=新的authenticationContext(tenantSpecificURL);
    //使用应用程序凭据进行身份验证
    var-credential=新的ClientCredential(clientId,clientSecret);
    AuthenticationResult AuthenticationResult=等待authenticationContext.AcquireTokenAsync(资源URL,凭证);
    返回authenticationResult.AccessToken;
    }
    
    步骤2:获取Power BI报告嵌入URL

    传递在步骤1中生成的访问令牌,从power BI门户url获取的groupId和reportId

     private async Task<EmbedModel> GetEmbedReportModel(string groupId, string reportId, string accessToken)
        {
            string restUrl = "https://api.powerbi.com/v1.0/myorg/groups/" + groupId+"/reports";
    
            // add JSON to HttpContent object and configure content type
            var method = new HttpMethod("GET");
            var request = new HttpRequestMessage(method, restUrl);
    
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Accept", "application/json");
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    
                // send POST request to Power BI service 
                var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
                var reportObject = JsonConvert.DeserializeObject<ReportObjects>(jsonResult);
                var report = reportObject.value.Where(r => r.id == reportId).FirstOrDefault();
                return new EmbedModel { Id = report.id, EmbedUrl = report.embedUrl, Name = report.name };
            }
        }
    
    the response you will get here is 
        {
      "value": [
        {
          "datasetId": "xxxxxx-abcasdasd-dasda-4weas",
          "id": "3asder78-asds-4d73-1232-5345dfsdfs",
          "name": "SalesMarketing",
          "webUrl": "https://app.powerbi.com/groups/xxx-xxxxx-xxx-xxxxxx-xxxxx/reports/xxxxxx-xxxx-xxx-xxxx-xxxxxxxx",
          "embedUrl": "https://app.powerbi.com/reportEmbed?reportId=xxxxxx-xxxx-xxxx-xxxx-xxxxxx&groupId=aadasda21-xxcx-xx-xx-xxxxxx"
        }
      ]
    }
    
    private异步任务GetEmbedReportModel(string groupId、string reportId、string accessToken)
    {
    字符串restUrl=”https://api.powerbi.com/v1.0/myorg/groups/“+groupId+”/reports”;
    //将JSON添加到HttpContent对象并配置内容类型
    var方法=新的HttpMethod(“GET”);
    var请求=新的HttpRequestMessage(方法,restUrl);
    使用(HttpClient=new HttpClient())
    {
    client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
    client.DefaultRequestHeaders.Add(“授权”、“承载人”+accessToken);
    //向Power BI服务发送POST请求
    var jsonResult=await client.sendaync(request.Result.Content.ReadAsStringAsync();
    var reportObject=JsonConvert.DeserializeObject(jsonResult);
    var report=reportObject.value.Where(r=>r.id==reportId.FirstOrDefault();
    返回新的EmbedModel{Id=report.Id,EmbedUrl=report.EmbedUrl,Name=report.Name};
    }
    }
    你在这里得到的回应是
    {
    “价值”:[
    {
    “数据集”:“xxxxxx-abcasdasd-dasda-4weas”,
    “id”:“3asder78-asds-4d73-1232-5345dfsdfs”,
    “名称”:“SalesMarketing”,
    “webUrl”:https://app.powerbi.com/groups/xxx-xxxxx-xxx-xxxxxx-xxxxx/reports/xxxxxx-xxxx-xxx-xxxx-xxxxxxxx",
    “嵌入URL”:https://app.powerbi.com/reportEmbed?reportId=xxxxxx-xxxx-xxxx-xxxx-xxxxxx&groupId=aadasda21-xxcx-xx-xx-xxxxxx“
    }
    ]
    }
    
    步骤3:调用生成嵌入令牌API

     private async  Task<EmbedToken> GenerateEmbedToken(string groupId, string reportId,string accessToken)
        {
            string apiURL = "https://api.powerbi.com/v1.0/myorg/groups/"+ groupId + "/reports/"+ reportId +"/GenerateToken";
            string requestBody = @"{ ""accessLevel"": ""View""}";
            HttpContent postRequestBody = new StringContent(requestBody);
            postRequestBody.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");
    
            // prepare PATCH request
            var method = new HttpMethod("POST");
            var request = new HttpRequestMessage(method, apiURL);
            request.Content = postRequestBody;
    
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Accept", "application/json");
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    
                // send POST request to Power BI service 
                var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
                EmbedToken embedToken = JsonConvert.DeserializeObject<EmbedToken>(jsonResult);
    
                return embedToken;
            }
        }
    
    private async Task GenerateEmbedToken(string groupId、string reportId、string accessToken)
    {
    字符串apiURL=”https://api.powerbi.com/v1.0/myorg/groups/“+groupId+”/reports/“+reportId+”/GenerateToken”;
    字符串requestBody=@“{”“accessLevel”“:”“View”“}”;
    HttpContent postRequestBody=新的StringContent(requestBody);
    postRequestBody.Headers.ContentType=新的MediaTypeWithQualityHeaderValue(“应用程序/json”);
    //准备修补程序请求
    var方法=新的HttpMethod(“POST”);
    var请求=新的HttpRequestMessage(方法,apiURL);
    request.Content=postRequestBody;
    使用(HttpClient=new HttpClient())
    {
    client.DefaultRequestHeaders.Add(“Accept”、“application/json”);
    client.DefaultRequestHeaders.Add(“授权”、“承载人”+accessToken);
    //向Power BI服务发送POST请求
    var jsonResult=await client.sendaync(request.Result.Content.ReadAsStringAsync();
    EmbeddeToken EmbeddeToken=JsonConvert.DeserializeObject(jsonResult);
    返回令牌;
    }
    }
    
    步骤4:使用嵌入令牌a
     private async  Task<EmbedToken> GenerateEmbedToken(string groupId, string reportId,string accessToken)
        {
            string apiURL = "https://api.powerbi.com/v1.0/myorg/groups/"+ groupId + "/reports/"+ reportId +"/GenerateToken";
            string requestBody = @"{ ""accessLevel"": ""View""}";
            HttpContent postRequestBody = new StringContent(requestBody);
            postRequestBody.Headers.ContentType = new MediaTypeWithQualityHeaderValue("application/json");
    
            // prepare PATCH request
            var method = new HttpMethod("POST");
            var request = new HttpRequestMessage(method, apiURL);
            request.Content = postRequestBody;
    
            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Add("Accept", "application/json");
                client.DefaultRequestHeaders.Add("Authorization", "Bearer " + accessToken);
    
                // send POST request to Power BI service 
                var jsonResult = await client.SendAsync(request).Result.Content.ReadAsStringAsync();
                EmbedToken embedToken = JsonConvert.DeserializeObject<EmbedToken>(jsonResult);
    
                return embedToken;
            }
        }