Descargar el ejemplo de aplicación cliente .NET | Ver el código en GitHub

En este artículo se muestra cómo autenticar una aplicación cliente Power BI. Incluye ejemplos de C#; sin embargo, el proceso de autenticación es el mismo para otro lenguajes de programación.

Para obtener un ejemplo de C# completo que muestre cómo autenticar una aplicación cliente de Power BI, consulte Ejemplo de aplicación cliente.

Las aplicaciones cliente de Power BI usan Active Directory (AAD) para autenticar a los usuarios y proteger las aplicaciones. La autenticación es el proceso de identificar una aplicación o usuario. Para identificar la aplicación cliente en AAD, registre la aplicación con AAD. Al registrar una aplicación cliente en AAD, concede a la aplicación acceso a las API de Power BI. Para obtener información sobre cómo registrar la aplicación cliente de Power BI, consulte Registrar una aplicación de cliente.

Las llamadas a la API de REST de Power BI se realizan en nombre de un usuario autenticado pasando un token en el encabezado de "Autorización" de la solicitud. El token se adquiere a través de Azure Active Directory.

Nota : Para la vista previa privada de Power BI, las aplicaciones se crean como aplicaciones de varios inquilinos, mediante el portal de administración de Azure.

Lo que necesita para autenticar una aplicación de cliente de Power BI

Para autenticar una aplicación de cliente de Power BI y realizar una solicitud web REST, necesitará:

  1. Registrar la aplicación cliente: para registrar una aplicación cliente de Power BI, consulte Registrar una aplicación cliente. Al registrar una aplicación cliente en Azure Active Directory, concede a la aplicación acceso a las API de Power BI.
  2. Asignar el identificador de cliente para la aplicación: para obtener el identificador de cliente para la aplicación, consulte Cómo obtener un identificador de aplicación cliente. El identificador de cliente es usado por la aplicación para identificarse en los usuarios a los que solicitan permisos.
    • En el código de la aplicación cliente, asigne la variable clientID al identificador de cliente de la aplicación de Azure.
  3. Asignar el URI de redireccionamiento : para una aplicación cliente, un URI de redireccionamiento da a AAD más detalles sobre la aplicación específica que autenticará. Un identificador uniforme de recursos (URI) es un valor para identificar un nombre de un recurso.

    • En el código de la aplicación cliente, asigne redirectUri a "https://login.live.com/oauth20_desktop.srf". Dado que una aplicación cliente no tiene un servicio externo al que redirigir, este URI es el marcador de posición estándar para las aplicaciones cliente.
  4. Asignar el URI de recurso para la API de Power BI : el URI de recurso identifica el recurso de la API de Power BI.

    • En el código de la aplicación cliente, asigne resourceUri a "https://analysis.windows.net/powerbi/api".
  5. Asignar el URI de autoridad OAuth2 : el URI de autoridad identifica el recurso de autoridad OAuth2.

    • En el código de la aplicación cliente, asigne un Uri de entidad a "https://login.windows.net/common/oauth2/authorize".
  6. Asignar el URI del conjunto de datos para los conjuntos de datos de la API de Power BI: el URI de los conjuntos de datos identifica el recurso de los conjuntos de datos de la API de Power BI.

    • En el código de la aplicación cliente, asigne datasetsUri a "https://api.powerbi.com/v1.0/myorg/datasets".

Para realizar una solicitud de datos en el servicio REST de Power BI, deberá suministrar un token de acceso. En una aplicación cliente .NET, se usa la Biblioteca de autenticación de Azure AD para el paquete NuGet de .NET para obtener un token de acceso. Este es el proceso. A continuación se muestra un método AccessToken() de ejemplo.

Si no dispone de la Biblioteca de autenticación de Microsoft Azure (ADAL), consulte Cómo agregar la biblioteca de autenticación de Azure Active Directory.

Importante: Para autenticar una aplicación cliente, debe agregar una referencia a Microsoft.IdentityModel.Clients.ActiveDirectory que se incluye en la biblioteca de autenticación de Microsoft Azure (ADAL).

Pasos para obtener un token de acceso

  1. Cree una instancia de AuthenticationContext : AuthenticationContext es la clase principal que representa la autoridad de emisión del token para recursos de Azure AD. El constructor toma:

    • Un authorityUri OAuth2
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. Llame a AuthenticationContext.AcquireToken() para obtener un token: el método toma:

    • Un resourceUri de la API de Power BI
    • El clientID de la aplicación de Power BI
    • El redirectUri de la aplicación de Power BI
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

Para más información acerca de qué hace AuthenticationContext para obtener un token, consulte Flujo de contexto de autenticación de Azure.

Ejemplo de C#: token de acceso Get

En una aplicación cliente .NET, use AuthenticationContext para obtener un token de acceso.

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

Realizar una solicitud de datos a la API de REST de Power BI mediante un token

Después de obtener un token de acceso de Active Directory (AAD), use el token para realizar una solicitud web a la API de REST de Power BI. Para crear una solicitud web de REST de Power BI, agregue un token de acceso al encabezado de la solicitud como:

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

Ejemplo de C#: solicitud de datos de la API de REST de Power BI mediante un token

Para obtener un ejemplo de C# completo que muestra cómo autenticar una aplicación cliente de Power BI y llamar a todas las operaciones de REST de Power BI, consulte el Ejemplo de aplicación cliente o vea el código en 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; }
}

Flujo de contexto de autenticación de Azure

En una aplicación cliente .NET, se usa AuthenticationContext para adquirir un token de acceso de Azure. AuthenticationContext es la clase principal que representa la autoridad de emisión del token para los recursos de Azure AD. AuthenticationContext hace lo siguiente:

  1. AuthenticationContext inicia el flujo mediante el redireccionamiento del agente de usuario al extremo de autorización de Azure Active Directory. El usuario se autentica y da su consentimiento, si se requiere consentimiento.

  2. El extremo de autorización de Azure Active Directory redirecciona al agente de usuario a AuthenticationContext con un código de autorización. El agente de usuario, devuelve un código de autorización al URI de redireccionamiento de la aplicación cliente.

  3. AuthenticationContext solicita un token de acceso del extremo de emisión de tokens de Azure Active Directory. Muestra el código de autorización para demostrar que el usuario ha dado su consentimiento.

  4. El extremo de emisión de tokens de Azure Active Directory devuelve un token de acceso.

  5. La aplicación cliente usa el token de acceso para autenticarse en la API web.

  6. Después de autenticar la aplicación cliente, la API de REST de Power BI devuelve los datos solicitados.

Para más información acerca del flujo de autorización de Azure Active Directory (Azure AD), consulte Flujo de concesión de código de autorización.

Cómo agregar la biblioteca de autenticación de Azure Active Directory

En una aplicación cliente .NET, se usa AuthenticationContext en la Biblioteca de autenticación de Active Directory para adquirir un token de acceso de Azure. Puede instalar el paquete NuGet de la Biblioteca de autenticación de Active Directory desde Visual Studio. Cuando se instala un paquete de NuGet, Visual Studio crea una referencia a los ensamblados necesarios.

  1. Haga clic con el botón derecho en una solución.

  2. Elija Administrar paquetes de NuGet.

  3. Busque la Biblioteca de autenticación de Active Directory.

  4. Elija Biblioteca de autenticación de Active Directory en la lista de paquetes y haga clic en Instalar.

Vea también

Biblioteca de autenticación de Azure AD para el paquete .NET de nuget
Biblioteca de autenticación de Active Directory (ADAL) v1 para .NET
OAuth 2.0 en Azure AD
Flujo de concesión de código de autorización
Escenarios de autenticación para Azure AD
¿Tiene más preguntas? Pruebe la comunidad de Power BI