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 Smile

YoungCandidCrossbill-size_restricted

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) :

MbcpAm3hXR

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 :

NZumIlukgX

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 !

FADATA

Fabien Adato est Customer Engineer Data et AI chez Microsoft. Après avoir intégré la société CGI Business Consulting où il rejoint une équipe dédiée à la Business Intelligence, il fait ses premières armes sur la solution Microsoft SQL Server. Pendant plus de 4 ans, il acquiert des compétences techniques et fonctionnelles sur toute la chaîne de valeur de la BI (ETL, Base de Données, Cube Olap et Rapport). Il a pu se spécialiser également sur de nouvelles technologies de la Data et notamment Hadoop, Pig et Hive, ainsi que des technologies self-service BI, le No-SQL comme la base de données MongoDB et le moteur d’indexation ElasticSearch. Il entre chez AZEO en 2014 puis Avanade en 2021 puis Microsoft en 2021 pour y assurer le poste de CE DATA / AI, autour des technologies Microsoft SQL Server, Power BI et Azure Data.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.