Вопрос или проблема
Я хочу встроить отчет, размещенный на моем сервере отчетов Power BI (PBIRS), который работает на виртуальной машине, не закрывающейся. Я использовал метод rs:embed=true
, и хотя это отображает отчет, он запрашивает имя пользователя и пароль каждый раз, когда загружается встроенная страница.
Есть ли способ обойти этот запрос учетных данных, чтобы пользователи могли просматривать отчет без повторной авторизации каждый раз? В идеале, я хотел бы, чтобы процесс входа обрабатывался за кулисами, оставаясь в рамках локальной настройки сервера отчетов (избегая веб-сайта Power BI).
Кто-нибудь знает, как это реализовать? Спасибо заранее!
Ответ или решение
Встраивание отчетов Power BI в проекты ASP.NET и Angular без повторных запросов на аутентификацию
Встраивание отчетов из Power BI Report Server (PBIRS) в веб-приложения, такие как ASP.NET и Angular, представляет собой распространённую задачу, особенно когда нужно гарантировать, что пользователи имеют доступ к информации без необходимости каждый раз вводить свои учетные данные. Рассмотрим, как обойти необходимость повторной аутентификации при использовании метода rs:embed=true
.
1. Понимание аутентификации в Power BI Report Server
При использовании Power BI Report Server, по умолчанию говорится о необходимости аутентификации пользователей перед получением доступа к контенту. Даже если вы применяете метод rs:embed=true
, сервер все равно требует повторного ввода имени пользователя и пароля при каждом запросе. Чтобы избежать этого, необходимо реализовать подходы, позволяющие автоматически управлять аутентификацией.
2. Использование токенов доступа
Одним из наиболее эффективных способов решения проблемы повторной аутентификации является использование Access Tokens (токенов доступа). Мы может настроить сервер для аутентификации через OAuth или JWT (JSON Web Tokens).
3. Интеграция с ASP.NET
На стороне серверной части (ASP.NET) можно создать контроллер, который будет обрабатывать запросы на отчет. Он будет осуществлять подключение к PBIRS с использованием учетных данных, сохраняя их в конфигурационном файле или хранилище безопасно. Примерный код может выглядеть так:
public class ReportController : Controller
{
private string reportServerUrl = "https://<your-report-server>/reportserver";
private string reportPath = "/Path/To/Report";
public IActionResult EmbedReport()
{
string userName = "yourUsername";
string password = "yourPassword";
NetworkCredential credentials = new NetworkCredential(userName, password);
// Создание учетных данных
ReportExecutionService rs = new ReportExecutionService();
rs.Url = reportServerUrl + "/ReportExecution2005.svc";
rs.Credentials = credentials;
// Получение отчета
string reportId = "yourReportId";
ExecutionInfo execInfo = rs.LoadReport(reportPath, reportId);
byte[] result = rs.Render("HTML5", execInfo.ExecutionID, out string encoding, out string mimeType, out string extension);
return File(result, mimeType);
}
}
4. Кросс-доменные запросы и Angular
На стороне клиентского приложения, выполненного на Angular, можно выполнить запрос к вашему контроллеру для получения данных отчета. Существует возможность использовать HttpClient для этого.
import { HttpClient } from '@angular/common/http';
import { Injectable } from '@angular/core';
@Injectable({
providedIn: 'root',
})
export class ReportService {
constructor(private http: HttpClient) {}
getReport() {
return this.http.get('https://<your-backend-url>/report/embedreport', { responseType: 'blob' });
}
}
5. Настройка CORS
Чтобы избежать проблем с кросс-доменной аутентификацией (CORS), необходимо убедиться, что ваш сервер .NET настроен на разрешение запросов с клиентского домена. Для этого в Startup.cs добавьте следующее:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
app.UseCors(builder =>
{
builder.WithOrigins("https://<your-angular-app-url>")
.AllowAnyHeader()
.AllowAnyMethod();
});
}
6. Итог
Данная интеграция Power BI Report Server в ваше приложение на базе ASP.NET и Angular с использованием токенов доступа и серверного промежуточного слоя позволяет действовать с усиливающим доступом, избавляя пользователей от необходимости повторно вводить учетные данные. Таким образом, ваша система становится более удобной и эффективной. Убедитесь, что все данные об учетных записях защищены и корректно управляются, чтобы предотвратить несанкционированный доступ.
Готовность к этой интеграции может значительно повысить качество вашего приложения и удовлетворение пользователей.