Как программно назначить принципала службы рабочей области в C#

#c# #azure #azure-active-directory #powerbi #powerbi-embedded

Вопрос:

Я создал принципала службы в AAD и могу назначить рабочее пространство вручную в https://app.powerbi.com/home

Я хочу назначить принципала службы всем рабочим областям программно.

Есть ли какой-нибудь способ сделать это?

Пожалуйста, помогите

Спасибо

Ответ №1:

Да, вы можете использовать API REST Power BI и вызвать пользователя группы обновления, чтобы добавить участника службы в рабочую область:

Запрос:

 PUT https://api.powerbi.com/v1.0/myorg/groups/f089354e-8366-4e18-aea3-4cb4a3a50b48/users
 

Тело запроса:

 {
  "identifier": "1f69e798-5852-4fdd-ab01-33bb14b6e934",
  "groupUserAccessRight": "Admin",
  "principalType": "App"
}
 

Чтобы использовать API, вы должны пройти аутентификацию, например, с помощью ADAL или MSAL. Вот пример того, как получить маркер доступа с помощью MSAL:

 private static async Task<string> GetToken()
{
   // TODO: Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory -Version 2.21.301221612
   // and add using Microsoft.IdentityModel.Clients.ActiveDirectory

   //The client id that Azure AD created when you registered your client app.
   string clientID = "{Client_ID}";

   //RedirectUri you used when you register your app.
   //For a client app, a redirect uri gives Azure AD more details on the application that it will authenticate.
   // You can use this redirect uri for your client app
   string redirectUri = "https://login.live.com/oauth20_desktop.srf";

   //Resource Uri for Power BI API
   string resourceUri = "https://analysis.windows.net/powerbi/api";

   //OAuth2 authority Uri
   string authorityUri = "https://login.microsoftonline.com/common/";

   //Get access token:
   // To call a Power BI REST operation, create an instance of AuthenticationContext and call AcquireToken
   // AuthenticationContext is part of the Active Directory Authentication Library NuGet package
   // To install the Active Directory Authentication Library NuGet package in Visual Studio,
   //  run "Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory" from the nuget Package Manager Console.

   // AcquireToken will acquire an Azure access token
   // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
   AuthenticationContext authContext = new AuthenticationContext(authorityUri);
   var token = authContext.AcquireTokenAsync(resourceUri, clientID, new Uri(redirectUri)).Result.AccessToken;

   Console.WriteLine(token);
   Console.ReadLine();

   return token;
}
 

Этот маркер должен быть добавлен в заголовки запросов при вызове API:

 //Add token to the request header
request.Headers.Add("Authorization", String.Format("Bearer {0}", token));