Use the Power BI SDK with service principal profiles

This article explains how to use the SDK with service principal profiles. There are two ways to connect a Power BI client to a service principal profile. You can:

Once the client is associated with a profile, you can get the current service principal profile from the Power BI client.

Create a Power BI client with a service principal profile

var profileObjectId = new Guid("81f24a6d-7ebb-4478-99c7-2c36f7870a26"); 
var powerBIclient = new PowerBIClient(credentials, profileObjectId: profileObjectId);

When you create a Power BI client with the profile object ID, every API call that uses the client has the X-PowerBI-profile-id in the request header.

For example:

GET https://powerbiapi.analysis-df.windows.net/v1.0/myorg/groups


Authorization: Bearer eyJ0eXAiO.....5U_g
X-PowerBI-profile-id: 81f24a6d-7ebb-4478-99c7-2c36f7870a26

Set profile on API request call

Alternatively, you can specify the profile ID in the API request by using the customHeaders property in the API's overloaded PowerBIClient method WithHttpMessagesAsync.

var powerBIclient = new PowerBIClient(credentials); 
var profileHeader = new Dictionary<string, List<string>>(); 
profileHeader.Add("X-PowerBI-profile-id", new List<string> { "81f24a6d-7ebb-4478-99c7-2c36f7870a26" }); 
var groups = await powerBIclient.Groups.GetGroupsWithHttpMessagesAsync(customHeaders: profileHeader); 

For example,

GET https://powerbiapi.analysis-df.windows.net/v1.0/myorg/groups 

Authorization: Bearer eyJ0eXAiO.....5U_g 
X-PowerBI-profile-id: 81f24a6d-7ebb-4478-99c7-2c36f7870a26 

In the preceding code sample, the profile header isn't part of the client default headers, because the code doesn't add the profile header. You need to specify the profile header with every API request.

Make sure you avoid duplications. For example, creating a client with a profile object ID and then specifying the header with the API request results in unauthorized errors.

Get the current service principal profile from Power BI client

To retrieve the current service principal profile from the SDK client, call GetServicePrincipalProfileObjectId.

var profileObjectId = new Guid("81f24a6d-7ebb-4478-99c7-2c36f7870a26"); 
var powerBIclient = new PowerBIClient(credentials, profileObjectId: profileObjectId); 
var currentProfileObjectId = powerBIclient.GetServicePrincipalProfileObjectId(); 

Considerations and limitations

There's no support for service principal profiles with Azure Analysis Services (AAS) in live connection mode.