Télécharger l’exemple d’application web | Afficher le code sur GitHub : Default.aspx.cs | Redirect.aspx.cs

Cet article explique comment authentifier une application web Power BI. Les exemples sont en C#, mais le processus d’authentification est identique pour les autres langages de programmation web. Il existe un exemple d’application web sur GitHub. Pour savoir comment exécuter l’exemple, consultez Exemple d’application web.

Les applications web 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 web dans AAD, vous l’inscrivez auprès d’Azure Active Directory. Quand vous inscrivez une application web dans Azure Active Directory, vous lui donnez accès aux ressources d’API REST de Power BI. Pour savoir comment inscrire votre application web Power BI, consultez Inscrire une application web.

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

REMARQUE Pour Power BI, les applications sont créées en tant qu’applications mutualisées à l’aide du portail de gestion Azure.

Conditions requises pour authentifier une application web Power BI

Les étapes à suivre pour authentifier une application web Power BI et effectuer une requête web REST sont les suivantes. Elles s’appliquent à une application web ASP.NET, mais également à d’autres plateformes. Pour en savoir plus sur OAuth 2.0 dans Azure AD, consultez OAuth 2.0 dans Azure AD.

Étape 1 : Inscription de votre application web

Lorsque vous inscrivez une application web dans Azure Active Directory, vous lui donnez accès aux ressources d’API REST de Power BI. Pour inscrire une application web Power BI, consultez Inscrire une application web.

Étape 2 : Configuration des paramètres de Power BI pour authentifier auprès d’Azure AD

Voici les paramètres dont vous avez besoin pour authentifier une application web Power BI auprès d’Azure AD.

Paramètre Description Valeur
ID client L’ID client permet à l’application de s’identifier auprès des utilisateurs auxquels elle demande des autorisations. Pour obtenir un ID client d’application Power BI, consultez Obtention d’un ID d’application cliente.
Secret du client La clé secrète du client est envoyée avec un ID client lors de l’authentification à Azure AD pour appeler une API web. Pour obtenir une clé secrète du client d’application Power BI, consultez Obtention d’une clé secrète du client.
URI de ressource URI de ressource permettant d’accéder à la ressource Power BI à autoriser. Vous devez utiliser cet URI précis. https://analysis.windows.net/powerbi/api
URI d’autorité L’URI d’autorité est une ressource Azure qui utilise un ID client pour obtenir un jeton d’accès. https://login.windows.net/common/oauth2/authorize
URL de redirection URL de redirection pour l’URL de l’application web. Le service Azure AD redirige vers l’URL de l’application web avec un code d’authentification. Exemple : http://localhost:13526/Redirect

Étape 3 : Création d’une chaîne de requête pour obtenir un code d’autorisation auprès d’Azure AD

Pour authentifier une application web Power BI, vous devez tout d’abord créer une chaîne de requête d’URL pour rediriger vers le service d’authentification Azure AD. Une fois que vous avez entré des informations d’identification valides, Azure AD renvoie un code d’autorisation. Voici un exemple d’URL Azure AD complète avec une chaîne de requête. Vous devez utiliser une URL semblable à celle-ci pour obtenir un code d’autorisation de la part d’Azure AD. Utilisez Response.Redirect()pour rediriger vers le service Azure AD qui retournera un code d’autorisation d’Azure AD. Vous devez utiliser le code d’autorisation obtenu à l’étape 4 pour obtenir un jeton d’accès par code d’autorisation.

https://login.windows.net/common/oauth2/authorize
  ?response_type=code
  &client_id=1861585d...9a79c296
  &resource= https://analysis.windows.net/powerbi/api
  &redirect_uri= http://localhost:13526/Redirect

Paramètres de chaîne de requête d’authentification Power BI

Paramètre Description
response_type=code Azure AD renvoie un code d’autorisation.
client_id=1861585d...9a79c296 L’ID client permet à l’application de s’identifier auprès des utilisateurs auxquels elle demande des autorisations. L’ID client vous est fourni lorsque vous inscrivez votre application Azure.
resource= https://analysis.windows.net/powerbi/api URI de ressource permettant d’accéder à la ressource Power BI à autoriser. Vous devez utiliser cet URI précis.
redirect_uri= http://localhost:13526/Redirect Une fois que l’utilisateur s’authentifie, Azure AD redirige vers l’application web.

Voici un exemple de code C# permettant de créer une URL d’authentification Azure AD avec une chaîne de requête et de rediriger vers le service d’autorité Azure AD.

Exemple – Connexion C#

    protected void signInButton_Click(object sender, EventArgs e)
    {
        //Create a query string
        //Create a sign-in NameValueCollection for query string
        var @params = new NameValueCollection
        {
            //Azure AD will return an authorization code.
            //See the Redirect class to see how "code" is used to AcquireTokenByAuthorizationCode
            {"response_type", "code"},

            //Client ID is used by the application to identify themselves to the users that they are requesting permissions from.
            //You get the client id when you register your Azure app.
            {"client_id", Properties.Settings.Default.ClientID},

            //Resource uri to the Power BI resource to be authorized
            {"resource", "https://analysis.windows.net/powerbi/api"},

            //After user authenticates, Azure AD will redirect back to the web app
            {"redirect_uri", "http://localhost:13526/Redirect"}
        };

        //Create sign-in query string
        var queryString = HttpUtility.ParseQueryString(string.Empty);
        queryString.Add(@params);

        //Redirect authority
        //Authority Uri is an Azure resource that takes a client id to get an Access token
        string authorityUri = "https://login.windows.net/common/oauth2/authorize/";
        Response.Redirect(String.Format("{0}?{1}", authorityUri, queryString));       
    }

Étape 4 : Obtention d’un jeton d’accès Azure AD à l’aide du code d’autorisation

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 web .NET, vous utilisez le package NuGet Bibliothèque d’authentification Azure AD pour .NET pour obtenir un jeton d’accès. 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.

Une fois que votre application redirige vers l’URI d’autorité Azure AD et obtient un code d’authentification, votre application obtient un jeton par code d’autorisation. Voici comment votre application peut obtenir le code d’autorisation et un jeton d’accès : Dans une classe Redirect:

  1. Récupérez le code d’authentification Azure AD renvoyé par Azure AD.

    string code = Request.Params.GetValues(0)[0];
    
  2. Créez un AuthenticationContext en passant l’URI d’autorité et un TokenCache.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Créez un ClientCredential en passant l’ ID client et le secret clientde l’application Azure.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Obtenez un jeton par code d’autorisation en transmettant le code d’authentification renvoyé par Azure AD et une URL de redirection.

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. Redirigez vers default.aspx.

    Response.Redirect("/Default.aspx");
    
  6. Définissez une chaîne d’index « authResult » de session sur AuthenticationResult, afin de pouvoir utiliser le résultat sur la page default.aspx.

    Session["authResult"] = AR;
    

Dans une page Default.aspx:

  1. Obtenez un AuthenticationResult de la session. À l’étape 4, vous devez utiliser l’ AuthenticationResult pour obtenir un AccessTokend’autorisation.

    AuthenticationResult authResult = (AuthenticationResult)Session["authResult"];
    

Voici le code complet pour obtenir un jeton d’accès Azure par code d’autorisation et rediriger vers default.aspx.

Remarque : l’URI de redirection doit correspondre au redirect_uri utilisé lors de la demande du code d’autorisation.

public partial class Redirect : System.Web.UI.Page
{
  protected void Page_Load(object sender, EventArgs e)
  {
      //Redirect uri must match the redirect_uri used when requesting Authorization code.
      string redirectUri = "http://localhost:13526/Redirect";
      string authorityUri = "https://login.windows.net/common/oauth2/authorize/";

      // Get the auth code
      string code = Request.Params.GetValues(0)[0];

      // Get auth token from auth code       
      TokenCache TC = new TokenCache();

      AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
      ClientCredential cc = new ClientCredential
          (Properties.Settings.Default.ClientID,
          Properties.Settings.Default.ClientSecret);

      AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);

      //Set Session "authResult" index string to the AuthenticationResult
      Session["authResult"] = AR;

      //Redirect back to Default.aspx
      Response.Redirect("/Default.aspx");
  }
}

public partial class _Default : Page
{
  public AuthenticationResult authResult { get; set; }
  string baseUri = "https://api.powerbi.com/beta/myorg/";

  protected void Page_Load(object sender, EventArgs e)
  {

      //Test for AuthenticationResult
      if (Session["authResult"] != null)
      {
          //Get the authentication result from the session
          authResult = (AuthenticationResult)Session["authResult"];

          //Show Power BI Panel
          signInStatus.Visible = true;

          //Set user and token from authentication result
          userLabel.Text = authResult.UserInfo.DisplayableId;
          accessTokenTextbox.Text = authResult.AccessToken;
      }
  }

  ...
}

Étape 5 : Utilisation du jeton d’accès Azure AD pour appeler une opération Power BI

Les appels de l’API REST de Power BI sont effectués au nom d’un utilisateur authentifié par transmission d’un jeton d’accès obtenu via Azure Active Directory dans l’en-tête « Authorization ». 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.

Une fois que vous avez défini un AuthenticationResult en obtenant un jeton par code d’autorisation (AcquireTokenByAuthorizationCode), vous obtenez un jeton d’accès Azure en obtenant la propriété AccessToken d’ AuthenticationResult. Voici le code pour obtenir des jeux de donnéesPower BI. L’exemple de code crée une WebRequest et désérialise la chaîne de réponse en un jeu de données. Pour accéder à l’API REST de Power BI, vous devez créer un paramètre d’en-tête de la requête « Authorization » pour « Bearer {AccessToken} » :

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

Exemple C# – Obtenir des jeux de données Power BI

    protected void getDatasetsButton_Click(object sender, EventArgs e)
    {
        string responseContent = string.Empty;

        //The resource Uri to the Power BI REST API resource
        string datasetsUri = "https://api.powerbi.com/v1.0/myorg/datasets";

        //Configure datasets request
        System.Net.WebRequest request = System.Net.WebRequest.Create(datasetsUri) as System.Net.HttpWebRequest;
        request.Method = "GET";
        request.ContentLength = 0;
        request.Headers.Add("Authorization", String.Format("Bearer {0}", authResult.AccessToken));

        //Get datasets response from request.GetResponse()
        using (var response = request.GetResponse() as System.Net.HttpWebResponse)
        {
            //Get reader from response stream
            using (var reader = new System.IO.StreamReader(response.GetResponseStream()))
            {
                responseContent = reader.ReadToEnd();

                //Deserialize JSON string
                //JavaScriptSerializer class is in System.Web.Script.Serialization
                JavaScriptSerializer json = new JavaScriptSerializer();
                Datasets datasets = (Datasets)json.Deserialize(responseContent, typeof(Datasets));

                resultsTextbox.Text = string.Empty;
                //Get each Dataset from
                foreach (dataset ds in datasets.value)
                {
                    resultsTextbox.Text += String.Format("{0}\t{1}\n", ds.Id, ds.Name);
                }
            }
        }
    }

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

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

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. Sélectionnez Gérer les packages NuGet.
  3. Recherchez Bibliothèque d’authentification Active Directory.
  4. Sélectionnez 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