Télécharger l’exemple d’application cliente .NET | Afficher le code sur GitHub

Cet article explique comment authentifier une application cliente Power BI. Les exemples sont en C#, mais le processus d’authentification est identique pour les autres langages de programmation.

Pour un exemple complet en C# montrant comment authentifier une application cliente Power BI, consultez Exemple d’application cliente.

Les applications clientes Power BI utilisent Active Directory (AAD) pour authentifier les utilisateurs et protéger les applications. L’authentification est le processus consistant à identifier une application ou un utilisateur. Pour identifier votre application cliente dans AAD, vous l’inscrivez auprès d’Azure Active Directory. Quand vous inscrivez une application cliente dans AAD, vous lui donnez accès aux API de Power BI. Pour savoir comment inscrire votre application cliente Power BI, consultez Inscrire une application cliente.

Les appels de l’API REST de Power BI sont effectués au nom d’un utilisateur authentifié par transmission d’un jeton dans l’en-tête « Authorization » de la requête. Le jeton est obtenu via Azure Active Directory.

Remarque : pour Power BI Private Preview, les applications sont créées comme applications mutualisées à l’aide du portail de gestion Azure.

Conditions requises pour authentifier une application cliente Power BI

Pour authentifier une application cliente Power BI et effectuer une requête web REST, vous devez :

  1. Inscrire votre application cliente : Pour inscrire une application cliente Power BI, consultez Inscrire une application cliente. Lorsque vous inscrivez une application cliente dans Azure Active Directory, vous lui donnez accès aux API de Power BI.
  2. Affecter l’ID client pour votre application : Pour obtenir l’ID client de votre application, consultez Obtention d’un ID d’application cliente. L’ID client permet à l’application de s’identifier auprès des utilisateurs auxquels elle demande des autorisations.
    • Dans le code de votre application cliente, affectez la variable clientID à l’ID client de votre application Azure.
  3. Affecter l’URI de redirection - Pour une application cliente, un URI de redirection fournit à AAD des détails supplémentaires sur l’application spécifique qu’il doit authentifier. Un identificateur de ressource uniforme (URI) est une valeur permettant d’identifier le nom d’une ressource.

    • Dans le code de votre application cliente, affectez redirectUri à « https://login.live.com/oauth20_desktop.srf ». Dans la mesure où une application cliente n’a pas de service externe vers lequel rediriger, cet URI est l’espace réservé standard pour les applications clientes.
  4. Affecter l’URI de ressource pour l’API Power BI - L’URI de ressource identifie la ressource de l’API Power BI.

    • Dans le code de votre application cliente, affectez le resourceUri à « https://analysis.windows.net/powerbi/api ».
  5. Affecter l’URI d’autorité OAuth2 - L’URI d’autorité identifie la ressource d’autorité OAuth2.

    • Dans le code de votre application cliente, attribuez un URI d’autorité à « https://login.windows.net/common/oauth2/authorize ».
  6. Affecter l’URI de jeu de données pour les jeux de données de l’API Power BI - L’URI de jeu de données identifie la ressource des jeux de données de l’API Power BI.

    • Dans le code de votre application cliente, affectez le datasetsUri à « https://api.powerbi.com/v1.0/myorg/datasets ».

Pour effectuer une requête de données auprès du service REST de Power BI, vous devez fournir un jeton d’accès. Dans une application client .NET, vous utilisez le package NuGet Bibliothèque d’authentification Azure AD pour .NET pour obtenir un jeton d’accès. Le processus est le suivant. Voici un exemple de méthode AccessToken().

Si vous n’avez pas de Bibliothèque d’authentification Azure AD pour .NET, consultez Ajout d’une bibliothèque d’authentification Azure Active Directory.

Important Pour authentifier une application cliente, vous devez ajouter une référence à Microsoft.IdentityModel.Clients.ActiveDirectory qui est inclus dans la bibliothèque d’authentification Windows Azure (ADAL).

Procédure d’obtention d’un jeton d’accès

  1. Créer une instance de la classe AuthenticationContext - AuthenticationContext est la classe principale représentant l’autorité d’émission de jetons pour les ressources Azure AD. Le constructeur utilise :

    • Un URI d’autorité OAuth2
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. Appeler la méthode AuthenticationContext.AcquireToken() pour obtenir un jeton - La méthode utilise les éléments suivants :

    • resourceUri de l’API Power BI
    • clientID de votre application Power BI
    • redirectUri de votre application Power BI
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

Pour plus d’informations sur la manière dont AuthenticationContext obtient un jeton, consultez Flux de contexte d’authentification Azure.

Exemple en C# - Obtenir un jeton d’accès

Dans une application cliente .NET, vous utilisez AuthenticationContext pour obtenir un jeton d’accès.

      static string AccessToken()
      {
            //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.

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

            string clientId = {clientIDFromAzureAppRegistration};

            //A redirect uri gives AAD more details about the specific application that it will authenticate.
            //Since a client app does not have an external service to redirect to, this Uri is the standard placeholder for a client app.
            string redirectUri = "https://login.live.com/oauth20_desktop.srf";

            // Create an instance of AuthenticationContext to acquire an Azure access token
            // OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
            AuthenticationContext authContext = new AuthenticationContext(authorityUri);

            // Call AcquireToken to get an Azure token from Azure Active Directory token issuance endpoint
            //  AcquireToken takes a Client Id that Azure AD creates when you register your client app.
            //  To learn how to register a client app and get a Client ID, see https://msdn.microsoft.com/library/dn877542(Azure.100).aspx   
            string token = authContext.AcquireToken(resourceUri, clientID, new Uri(redirectUri)).AccessToken;

            return token;
      }

Faire une demande de données à l’API REST de Power BI en utilisant un jeton

Après avoir obtenu un jeton d’accès de la part d’Active Directory (AAD), utilisez-le pour effectuer une requête web à l’API REST de Power BI. Pour cela, vous devez ajouter un jeton d’accès à l’en-tête de la requête, comme suit :

request.Headers.Add("Authorization", String.Format("Bearer {0}", AccessToken()));

Exemple en C# - Demande de données à l’API REST de Power BI à l’aide d’un jeton

Pour un exemple complet en C# montrant comment authentifier une application cliente Power BI et appeler toutes les opérations REST de Power BI, consultez Exemple d’application cliente ou consulter le code sur GitHub.

        static dataset[] GetDatasets()
        {
            //This is sample code to illustrate a Power BI operation.
            //In a production application, refactor code into specific methods and use appropriate exception handling.

            //Power BI Datasets Url
            string powerBIApiUrl = "https://api.powerbi.com/v1.0/myorg/datasets";

            //Get Azure AD access token (see above)
            string token = AccessToken();

            //GET web request to list all datasets.
            //To get a datasets in a group, use the Groups uri: https://api.PowerBI.com/v1.0/myorg/groups/{group_id}/datasets
            HttpWebRequest request = System.Net.WebRequest.Create(powerBIApiUrl) as System.Net.HttpWebRequest;
            request.KeepAlive = true;
            request.Method = "GET";
            request.ContentLength = 0;
            request.ContentType = "application/json";

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

            //Get HttpWebResponse from GET request
            using (HttpWebResponse httpResponse = request.GetResponse() as System.Net.HttpWebResponse)
            {
                //Get StreamReader that holds the response stream
                using (StreamReader reader = new System.IO.StreamReader(httpResponse.GetResponseStream()))
                {
                    string responseContent = reader.ReadToEnd();

                    JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
                    Datasets datasets = (Datasets)jsonSerializer.Deserialize(responseContent, typeof(Datasets));

                    return datasets.value;
                }
            }
        }

public class Datasets
{
    public dataset[] value { get; set; }
}

public class dataset
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Flux de contexte d’authentification Azure

Dans une application cliente .NET, vous utilisez AuthenticationContext pour obtenir un jeton d’accès Azure. AuthenticationContext est la classe principale qui représente l’autorité d’émission de jetons pour les ressources Azure AD. AuthenticationContext effectue les opérations suivantes :

  1. AuthenticationContext démarre le flux en redirigeant l’agent utilisateur vers le point de terminaison d’autorisation Azure Active Directory. L’utilisateur s’authentifie et accepte, si un accord est requis.

  2. Le point de terminaison d’autorisation Azure Active Directory redirige l’agent utilisateur vers AuthenticationContext avec un code d’autorisation. L’agent utilisateur renvoie un code d’autorisation à l’URI de redirection de l’application cliente.

  3. AuthenticationContext demande un jeton d’accès au point de terminaison d’émission de jetons Azure Active Directory. Il présente le code d’autorisation pour prouver que l’utilisateur a accepté.

  4. Le point de terminaison d’émission de jetons Azure Active Directory renvoie un jeton d’accès.

  5. L’application cliente utilise le jeton d’accès pour s’authentifier auprès de l’API web.

  6. Après avoir authentifié l’application cliente, l’API REST de Power BI renvoie les données demandées.

Pour en savoir plus sur le flux d’autorisations Azure Active Directory (Azure AD), consultez Flux d’octroi d’un code d’autorisation.

Ajout d’une bibliothèque d’authentification Azure Active Directory

Dans une application cliente .NET, vous devez utiliser AuthenticationContext dans la bibliothèque d’authentification Active Directory pour obtenir un jeton d’accès Azure. Vous pouvez installer le package NuGet Bibliothèque d’authentification Active Directory à partir de Visual Studio. Lorsque vous installez un package NuGet, Visual Studio crée une référence aux assemblys requis.

  1. Cliquez avec le bouton droit sur une solution.

  2. Choisissez Gérer les packages NuGet.

  3. Recherchez Bibliothèque d’authentification Active Directory.

  4. Choisissez Bibliothèque d’authentification Active Directory dans la liste des packages, puis cliquez sur Installer.

Voir aussi

Package NuGet Bibliothèque d’authentification Azure AD pour .NET
Bibliothèque d’authentification Active Directory (ADAL) v1 pour .NET
OAuth 2.0 dans Azure AD
Flux d’octroi d’un code d’autorisation
Scénarios d’authentification pour Azure AD
D’autres questions ? Posez vos questions à la communauté Power BI