Scaricare l'esempio di app Web | Visualizzare il codice in GitHub: Default.aspx.cs | Redirect.aspx.cs.

Questo articolo illustra come autenticare un'app Web di Power BI. Include esempi in C#. Il processo di autenticazione, tuttavia, è uguale anche per gli altri linguaggi di programmazione Web. È disponibile un esempio di app Web in GitHub. Per informazioni su come eseguire l'esempio, vedere Esempio di app Web.

Le app Web di Power BI usano Active Directory (AAD) per autenticare gli utenti e proteggere le applicazioni. L'autenticazione è il processo di identificazione di un'app o un utente. Per identificare l'app Web in AAD, registrare l'app in Azure Active Directory. Quando si registra un'app Web in AAD, si concede all'app l'accesso alle risorse dell'API REST di Power BI. Per informazioni su come registrare l'app Web di Power BI, vedere Registrare un'app Web.

Per altre informazioni sul flusso di autorizzazioni di Azure Active Directory (Azure AD), vedere Flusso di concessione del codice di autorizzazione.

NOTA Per Power BI, le app vengono create come app multi-tenant tramite il portale di gestione di Azure.

Operazioni necessarie per autenticare un'app Web di Power BI

Per autenticare un'app Web di Power BI ed eseguire una richiesta Web REST, è necessario eseguire le operazioni seguenti. Questi passaggi sono relativi a un'app Web ASP.NET, ma sono applicabili anche ad altre piattaforme. Per altre informazioni su OAuth 2.0 in Azure AD, vedere OAuth 2.0 in Azure AD.

Passaggio 1 - Registrare l'app Web

Quando si registra un'app Web in Azure Active Directory, si concede all'app l'accesso alle risorse dell'API REST di Power BI. Per registrare un'app Web di Power BI, vedere Registrare un'app Web.

Passaggio 2 - Configurare le impostazioni di Power BI per l'autenticazione con Azure AD

Per autenticare un'app Web di Power BI con Azure AD, sono necessarie le impostazioni seguenti:

Impostazione Descrizione Valore
ID client L'ID client viene usato dall'applicazione per identificare se stessa nei confronti degli utenti a cui vengono richieste le autorizzazioni. Per ottenere un ID client dell'app Power BI, vedere Come ottenere un ID app client.
Segreto client La chiave privata del client viene inviata insieme all'ID client quando si esegue l'autenticazione in Azure AD per chiamare un'API Web. Per ottenere una chiave privata del client dell'app Power BI, vedere Come ottenere una chiave privata del client.
URI della risorsa URI per la risorsa di Power BI da autorizzare. È necessario usare esattamente questo URI. https://analysis.windows.net/powerbi/api
URI dell'autorità L'URI dell'autorità è una risorsa di Azure che accetta un ID client per ottenere un token di accesso. https://login.windows.net/common/oauth2/authorize
URL di reindirizzamento URL di reindirizzamento per l'URL dell'app Web. Il servizio di Azure AD reindirizza di nuovo all'URL dell'app Web con un codice di autenticazione. Esempio: http://localhost:13526/Redirect

Passaggio 3 - Creare una stringa di query per ottenere il codice di autorizzazione da Azure AD

Per autenticare un'app Web di Power BI, creare prima una stringa di query URL per il reindirizzamento al servizio di autenticazione di Azure AD. Dopo l'inserimento di credenziali valide, Azure AD restituisce un codice di autorizzazione. L'esempio seguente illustra un URL completo di Azure AD con una stringa di query. È possibile usare un URL analogo a questo per ottenere un codice di autorizzazione da Azure AD. Usare Response.Redirect() per reindirizzare al servizio di Azure AD che restituirà un codice di autorizzazione da Azure AD. Il codice di autorizzazione verrà usato nel passaggio 4 per acquisire un token di accesso in base al codice di autorizzazione.

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

Impostazioni della stringa di query di autenticazione per Power BI

Impostazione Descrizione
response_type=code Azure AD restituisce un codice di autorizzazione.
client_id=1861585d...9a79c296 L'ID client viene usato dall'applicazione per identificare se stessa nei confronti degli utenti a cui vengono richieste le autorizzazioni. L'ID client viene fornito quando si registra l'app Azure.
resource= https://analysis.windows.net/powerbi/api URI di risorsa per la risorsa di Power BI da autorizzare. È necessario usare esattamente questo URI.
redirect_uri= http://localhost:13526/Redirect Dopo l’autenticazione dell’utente, Azure AD reindirizzerà di nuovo all’app Web.

L'esempio di codice C# seguente permette di creare un URL di autorizzazione di Azure AD con una stringa di query e di reindirizzare al servizio dell'autorità di Azure AD.

Esempio – Accesso 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));       
    }

Passaggio 4 - Acquisire un token di accesso di Azure AD usando il codice di autorizzazione

Per effettuare una richiesta di dati per il servizio REST Power BI, sarà necessario fornire un token di accesso. In un'app Web .NET usare Azure AD Authentication Library per il pacchetto NuGet .NET per ottenere un token di accesso. Se Microsoft Azure Authentication Library (ADAL) non è disponibile, vedere Come aggiungere Azure Active Directory Authentication Library.

Dopo il reindirizzamento dell'app all'URI dell'autorità di Azure AD e l'acquisizione di un codice di autorizzazione, l'app ottiene un token in base al codice di autorizzazione. Di seguito viene illustrato il modo in cui l'app può ottenere il codice di autorizzazione e ottenere un token di accesso: In una classe Redirect:

  1. Ottenere il codice di autorizzazione di Azure AD restituito da Azure AD.

    string code = Request.Params.GetValues(0)[0];
    
  2. Creare un AuthenticationContext passando l'URI dell'autorità e un TokenCache.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Creare un ClientCredential passando l'ID client dell'app Azure e il Segreto client dell'app di Azure.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Ottenere un token in base al codice di autorizzazione passando il codice di autenticazione restituito da Azure AD e un URL di reindirizzamento.

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. Reindirizzare di nuovo a default.aspx.

    Response.Redirect("/Default.aspx");
    
  6. Impostare una stringa di indice "authResult" della sessione su AuthenticationResult, in modo che sia possibile usare il risultato nella pagina default.aspx.

    Session["authResult"] = AR;
    

In una pagina Default.aspx:

  1. Ottenere un valore AuthenticationResult dalla sessione. Nel passaggio 4 si usa il valore AuthenticationResult per ottenere un AccessToken di autorizzazione.

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

Il codice completo seguente permette di acquisire un token di accesso di Azure in base al codice di autorizzazione e di reindirizzare di nuovo a default.aspx.

Nota L'URI di reindirizzamento deve corrispondere al valore di redirect_uri usato durante la richiesta del codice di autorizzazione.

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;
      }
  }

  ...
}

Passaggio 5 - Usare il token di accesso di Azure AD per chiamare un'operazione di Power BI

Le chiamate all'API REST di Power BI vengono effettuate per conto di un utente autenticato passando un token di accesso acquisito con Azure Active Directory, nell'intestazione dell'autorizzazione. Dopo avere ottenuto un token di accesso da Active Directory (AAD), usare il token per effettuare una richiesta Web per l'API REST di Power BI.

Dopo avere impostato un AuthenticationResult acquisendo un token in base al codice di autorizzazione (AcquireTokenByAuthorizationCode), si otterrà un token di accesso di Azure ottenendo la proprietà AccessToken di AuthenticationResult. Il codice seguente permette di ottenere set di dati di Power BI. L'esempio di codice crea una richiesta WebRequest e deserializza la stringa della risposta in un set di dati. Per accedere all'API REST di Power BI, creare un'intestazione della richiesta impostando "Authorization" su "Bearer {AccessToken}":

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

Esempio C# – Ottenere set di dati di 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; }
}

Come aggiungere la Azure Active Directory Authentication Library

Per acquisire un token di accesso di Azure in un'app client .NET, usare AuthenticationContext nella Active Directory Authentication Library. È possibile installare il pacchetto NuGet di Active Directory Authentication Library da Visual Studio. Quando si installa un pacchetto NuGet, Visual Studio crea un riferimento agli assembly necessari.

  1. Fare clic con il pulsante destro del mouse su una soluzione.
  2. Scegliere Gestisci pacchetti NuGet.
  3. Cercare Active Directory Authentication Library.
  4. Scegliere Active Directory Authentication Library nell'elenco di pacchetti, quindi fare clic su Installa.

Vedere anche

Azure AD Authentication Library per il pacchetto NuGet .NET
Active Directory Authentication Library (ADAL) v1 per .NET
OAuth 2.0 in Azure AD
Flusso di concessione del codice di autorizzazione
Scenari di autenticazione per Azure AD
Altre domande? Provare la community di Power BI