Как правильно авторизовать приложение для доступа к данным Power BI?C#

Место общения программистов C#
Ответить
Anonymous
 Как правильно авторизовать приложение для доступа к данным Power BI?

Сообщение Anonymous »

Я пытаюсь настроить приложение Blazor, которое встраивает отчеты PowerBI в страницу.
Я следил за внедрением содержимого Power BI с помощью субъекта-службы и секретного руководства приложения и Мне удалось успешно настроить пример данных о собственности приложения.
Теперь я хотел бы опубликовать это приложение, чтобы администратор Azure другой организации в Microsoft Entra мог авторизовать приложение и внедрить одно из его отчеты. В конечном итоге пользователю не нужно будет входить в систему, и он сможет делегировать другому пользователю (не из своей организации Microsoft, а внутри приложения) просмотр отчета, поэтому мне нужно авторизовать
приложение (для управления данными PowerBI без входа пользователя в систему.
Пример этого варианта использования приведен здесь, в .Net Framework. Я также видел связанные примеры в этом файле Readme. здесь для .Net Core, но для всех этих примеров требуется ручной процесс создания субъекта-службы в Microsoft Entra и авторизации этого субъекта-службы в PowerBI.
Мне удалось зарегистрировать приложение в Microsoft Entra (через регистрацию приложений), а также возможность войти в мое приложение как пользователь из другой организации. Это создает «Корпоративное приложение» внутри клиента пользователя. Теперь, когда я пытаюсь получить токен для PowerBI, используя clientId моего приложения, я получаю сообщение «Неавторизованный». сообщение.
Вот соответствующий код в моем приложении:
appsettings.json

Код: Выделить всё

{
"AzureAd": {
"AuthorityUrl": "https://login.microsoftonline.com/organizations/",
"Instance": "https://login.microsoftonline.com/",
"Domain": "", // this is the domain where I registered my app
"ClientId": "", // this is the clientId  of the registered app
"TenantId": "organizations",
"ScopeBase": ["https://analysis.windows.net/powerbi/api/.default"],
"ClientSecret": "", // this is the secret I've added to the registered app
"CallbackPath": "/signin-oidc"
},
"Logging": {
"LogLevel": {
"Default": "Information",
"Microsoft.AspNetCore": "Warning"
}
},
"AllowedHosts": "*"
}

Код: Выделить всё

WebApplicationBuilder? builder = WebApplication.CreateBuilder(args);
builder.Services.Configure(config.GetSection(key: nameof(AzureAd)));
builder
.Services.AddAuthentication(OpenIdConnectDefaults.AuthenticationScheme)
.AddMicrosoftIdentityWebApp(config);

builder
.Services.AddRazorComponents()
.AddInteractiveServerComponents()
.AddMicrosoftIdentityConsentHandler();

builder.Services
.AddControllersWithViews()
.AddMicrosoftIdentityUI();

Затем я добавляю атрибут [Authorize] в свой компонент Blazor, поэтому, когда пользователь пытается получить доступ к этой странице, ему предлагается авторизовать приложение. Здесь в клиенте пользователя в Microsoft Entra создается «Корпоративное приложение». Похоже, что это успешно создает субъект-службу, поскольку я могу перейти в PowerBI и добавить этого субъекта-службы в качестве администратора его рабочей области PowerBI.
Однако, когда я пытаюсь сгенерировать токен для это:

Код: Выделить всё

IOptions options = services.GetRequiredService();

string tenantSpecificUrl = options.Value.AuthorityUrl?.Replace("organizations", "") ?? string.Empty;

var clientApp = ConfidentialClientApplicationBuilder
.Create(options.Value?.ClientId)
.WithClientSecret(options.Value?.ClientSecret)
.WithAuthority(tenantSpecificUrl)
.Build();

AuthenticationResult authenticationResult = clientApp
.AcquireTokenForClient(options.Value?.ScopeBase)
.ExecuteAsync()
.Result;

string token = authenticationResult.AccessToken;
TokenCredentials tokenCredentials = new(token, "Bearer");
var powerBIClient = new PowerBIClient(new Uri("https://api.powerbi.com"), tokenCredentials);

var groups = await powerBIClient.Groups.GetGroupsAsync();

Я получаю несанкционированное сообщение.
Я уверен, что в том, как я это делаю, есть что-то фундаментально неправильное, но я не могу найти никаких примеров. автоматического создания субъекта-службы в любом месте.
Любая помощь будет очень признательна!

Подробнее здесь: https://stackoverflow.com/questions/792 ... werbi-data
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»