Scaricare l'esempio di app client .NET | Visualizzare il codice in GitHub.

Questo articolo illustra come autenticare un'app client di Power BI. Include esempi in C#. Il processo di autenticazione, tuttavia, è uguale anche per gli altri linguaggi di programmazione.

Per un esempio C# completo che illustra come autenticare un'app client di Power BI, vedere l'esempio di app client.

Le app client di Power BI usano Azure 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 client in AAD, registrare l'app in Azure Active Directory. Quando si registra un'app client in AAD, si concede all'app l'accesso alle API Power BI. Per informazioni su come registrare l'app client di Power BI, vedere Registrare un'app client.

Le chiamate all'API REST di Power BI vengono effettuate per conto di un utente autenticato passando un token nell'intestazione "Authorization" della richiesta. Il token viene acquisito tramite Azure Active Directory.

Nota Per l'anteprima privata di Power BI, le app vengono create come app multi-tenant tramite il portale di gestione di Azure.

Operazioni necessarie per autenticare un'app client di Power BI

Per autenticare un'app client di Power BI ed eseguire una richiesta Web REST, è necessario eseguire le operazioni seguenti:

  1. Registrare l'app client: per registrare un'app client di Power BI, vedere Registrare un'app client. Quando si registra un'app client in Azure Active Directory, si concede all'app l'accesso alle API Power BI.
  2. Assegnare l'ID client per l'app: per ottenere l'ID client per l'app, vedere Come ottenere un ID app client. L'ID client viene usato dall'applicazione per identificare se stessa nei confronti degli utenti che richiedono le autorizzazioni.
    • Nel codice dell'app client assegnare la variabile clientID all'ID client dell'applicazione Azure.
  3. Assegnare l'URI di reindirizzamento: per un'app client, un URI di reindirizzamento fornisce ad AAD altri dettagli sull'applicazione specifica che verrà autenticata. Un URI (Uniform Resource Identifier) è un valore che permette di identificare un nome di una risorsa.

    • Nel codice dell'app client assegnare il valore redirectUri a "https://login.live.com/oauth20_desktop.srf". Poiché un'app client non ha un servizio esterno per il reindirizzamento, questo URI è il segnaposto standard per le app client.
  4. Assegnare l'URI della risorsa per l'API Power BI: l'URI della risorsa identifica la risorsa API Power BI.

    • Nel codice dell'app client assegnare il valore resourceUri a "https://analysis.windows.net/powerbi/api".
  5. Assegnare l'URI dell'autorità OAuth2 : l'URI dell'autorità identifica la risorsa dell'autorità OAuth2.

    • Nel codice dell'app client assegnare un URI dell'autorità a "https://login.windows.net/common/oauth2/authorize".
  6. Assegnare l'URI del set di dati per i set di dati dell'API Power BI : L'URI del set di dati identifica la risorsa dei set di dati dell'API Power BI.

    • Nel codice dell'app client assegnare il valore datasetsUri a "https://api.powerbi.com/v1.0/myorg/datasets".

Per effettuare una richiesta di dati per il servizio REST Power BI, sarà necessario fornire un token di accesso. In un'app client .NET usare Azure AD Authentication Library per il pacchetto NuGet .NET per ottenere un token di accesso. È necessario eseguire le operazioni seguenti. Di seguito è riportato un metodo AccessToken() di esempio.

Se Microsoft Azure Authentication Library (ADAL) non è disponibile, vedere Come aggiungere Azure Active Directory Authentication Library.

Importante Per autenticare un'app client, è necessario aggiungere un riferimento a Microsoft.IdentityModel.Clients.ActiveDirectory, incluso in Microsoft Azure Authentication Library (ADAL).

Passaggi per ottenere un token di accesso

  1. Creare un'istanza di AuthenticationContext : AuthenticationContext è la classe principale che rappresenta l'autorità di emissione dei token per le risorse di Azure AD. Il costruttore accetta:

    • Un OAuth2 authorityUri.
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. Chiamare AuthenticationContext.AcquireToken() per ottenere un token: il metodo accetta i valori seguenti:

    • resourceUri dell'API Power BI
    • clientID dell'app di Power BI
    • redirectUri dell'app di Power BI
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

Per altre informazioni sulle operazioni eseguite da AuthenticationContext per ottenere un token, vedere Flusso del contesto di autenticazione di Azure.

Esempio C# - Ottenere il token di accesso

Per ottenere un token di accesso in un'app client .NET, usare AuthenticationContext .

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

Effettuare una richiesta di dati per un'API Power BI usando un token

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. Per creare una richiesta Web REST di Power BI, aggiungere un token di accesso all'intestazione della richiesta, come illustrato di seguito:

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

Esempio C# - Richiesta di dati dell'API REST di Power BI tramite un token

Per un esempio C# completo che illustra come autenticare un'app client di Power BI, vedere l'esempio di app client oppure Visualizzare il codice in 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; }
}

Flusso del contesto di autenticazione di Azure

Per acquisire un token di accesso di Azure in un'app client .NET, usare AuthenticationContext. AuthenticationContext è la classe principale che rappresenta l'autorità di emissione dei token per le risorse di Azure AD. **AuthenticationContext **esegue le operazioni seguenti:

  1. AuthenticationContext avvia il flusso reindirizzando l'agente utente all'endpoint di autorizzazione di Azure Active Directory. L'utente effettua l'autenticazione e accetta le condizioni, se necessario.

  2. L'endpoint di autorizzazione di Azure Active Directory reindirizza l'agente utente ad AuthenticationContext con un codice di autorizzazione. L'agente utente restituisce un codice di autorizzazione all'URI di reindirizzamento dell'applicazione client.

  3. AuthenticationContext richiede un token di accesso dall'endpoint di emissione di token di Azure Active Directory. Presenta il codice di autorizzazione per dimostrare che l'utente ha accettato le condizioni.

  4. L'endpoint di emissione dei token di Azure Active Directory restituisce un token di accesso.

  5. L'applicazione client usa il token di accesso per l'autenticazione nell'API Web.

  6. Dopo l'autenticazione dell'applicazione client, l'API REST di Power BI restituisce i dati richiesti.

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

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 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 dall'elenco di pacchetti e 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