Power BI : se connecter aux API en mode REST avec un Service Principal Azure AD
Dans cet article, nous allons voir comment se connecter aux API Power BI en mode REST en utilisant un service princial (SP). Pour rappel, nous avons déjà utilisé la méthode du SP avec Azure Data Factory dans un de mes précédents articles => ICI. L’idée maintenant c’est d’utiliser cette méthode avec n’importe quelles technologies et langages avec du REST.
L’utilisation des SP est très pratique, car ainsi nous n’avons plus besoin d’avoir un compte utilisateur AD à gérer (comme avec les modes UserOwnsData ou AppOwnsData), et en plus cela fait aussi économiser une licence Power BI Pro, il n’y a pas de petites économies 

Commencez par créer un SP dans Azure AD et configurer Power BI pour activer l’authentification via service principal, la doc MS explique tout ça : https://docs.microsoft.com/fr-fr/power-bi/developer/embedded/embed-service-principal
Puis récupérez l’application ID et le tenant ID, vous pouvez notamment passer par le portail Azure dans les paramètres de votre SP (le menu s’appelle App registrations) :

Et créez aussi un secret pour votre SP, il faut le sauvegarder quelque part car il est accessible que lors de sa création :

Comme le SP va se connecter directement à Power BI, n’oubliez pas de lui donner des droits sur les Workspaces auxquels il aura accès. Attention, cela ne fonctionne qu’avec les Workspace V2 !
Pour se connecter aux API, il va d’abord falloir récupérer un token d’authentification en envoyant une requête POST au service d’’authentification Microsoft “login.microsoftonline.com” en passant les bonnes informations de connexion en body. Le body devra avoir le format suivant et contenir votre application ID et son secret :
{
"Grant_type": "client_credentials",
"Resource": "https://analysis.windows.net/powerbi/api",
"Client_id": "<Application ID>",
"Client_secret": "<Application Secret>",
"Scope": "https://analysis.windows.net/powerbi/api/.default"
}
L’url à appeler devra aussi contenir le tenant id de votre AD : https://login.microsoftonline.com/<tenantid>/oauth2/token
En réponse de l’appel, vous pourrez récupérer un token :
{
"token_type": "Bearer",
"expires_in": "3599",
"ext_expires_in": "3599",
"expires_on": "1594665662",
"not_before": "1594661762",
"resource": "https://analysis.windows.net/powerbi/api",
"access_token": "<ICI>"
}
Vous pourrez alors l’utiliser dans tous vos appels aux API Power BI en le mettant dans le paramètre authorization du header :
{
"Authorization": "Bearer <ICI>",
"Content-Type": "application/json"
}
Et c’est gagné !
Attention, le token expire au bout d’un certain temps, il faut prévoir de le regénérer si besoin.
Pour finir, voici un exemple complet en PowerShell qui liste au final les Workspaces auxquels le SP à accès :
#Specify SP informations
$tenantid = '<Tenant ID>'
$appID = '<Application ID>'
$appSecret = '<Application Secret>'
#Get token
$TokenArgs = @{
Grant_type = 'client_credentials'
Resource = 'https://analysis.windows.net/powerbi/api'
Client_id = $appID
Client_secret = $appSecret
Scope = "https://analysis.windows.net/powerbi/api/.default"
}
$out = Invoke-RestMethod -Uri https://login.microsoftonline.com/$tenantid/oauth2/token -Body $TokenArgs -Method POST
#Save token
$tokenaccess = $out.access_token
#Get group API test
$header = @{
'Content-Type'='application/json'
'Authorization'= "Bearer $tokenaccess"
}
$uri = "https://api.powerbi.com/v1.0/myorg/groups"
$outrequest = Invoke-RestMethod -Method Get -Uri $uri -Headers $header
#Show results
$outrequest.value
Il vous reste plus qu’à parcourir la documentation des API Power BI pour trouver la ou les bonnes méthodes à appeler en fonction de vos besoins : https://docs.microsoft.com/en-us/rest/api/power-bi/
FIN !
Views:
4 458