Descargar el ejemplo de aplicación web | Ver código en GitHub: Default.aspx.cs | Redirect.aspx.cs

En este artículo se muestra cómo autenticar una aplicación web de Power BI. Incluye ejemplos de C#; sin embargo, el proceso de autenticación es el mismo para otro lenguajes de programación web. Hay un ejemplo de aplicación web en GitHub. Para obtener información sobre cómo ejecutar el ejemplo, consulte Ejemplo de aplicación web.

Las aplicaciones web 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 web en AAD, registre la aplicación con AAD. Al registrar una aplicación web en AAD, concede a la aplicación acceso a los recursos de la API de REST de Power BI. Para obtener información sobre cómo registrar su aplicación web de Power BI, consulte Registrar una aplicación web.

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.

NOTA: Para 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 web de Power BI

A continuación se indican los pasos necesarios para autenticar una aplicación web de Power BI y realizar una solicitud web REST. Estos pasos se aplican a una aplicación web ASP.NET; sin embargo, los pasos se aplican a otras plataformas. Para más información acerca de OAuth 2.0 en Azure AD, consulte OAuth 2.0 en Azure AD.

Paso 1: Registrar la aplicación web

Al registrar una aplicación web en Azure Active Directory, concede a la aplicación acceso a los recursos de la API de REST de Power BI. Para registrar una aplicación web de Power BI, consulte Registrar una aplicación web.

Paso 2: Configurar las opciones de Power BI para autenticarse con Azure AD

Esta es la configuración que se necesita para autenticar una aplicación web de Power BI con Azure AD.

Configuración Descripción Valor
Id. de cliente El Id. de cliente es usado por la aplicación para identificarse a los usuarios a los que están solicitando permisos. Para obtener un identificador de cliente de Power BI, consulte Cómo obtener un identificador de aplicación de cliente.
Secreto del cliente La clave secreta del cliente se envía junto con un identificador de cliente al autenticarse en Azure AD para llamar a una API de web. Para obtener una clave secreta de cliente de Power BI, consulte Cómo obtener una clave secreta de cliente.
Uri de recurso El Uri de recurso para el recurso de Power BI a autorizar. Debe usar este Uri exacto. https://analysis.windows.net/powerbi/api
Uri de la entidad El Uri de la entidad es un recurso de Azure que toma un identificador de cliente para obtener un token de acceso. https://login.windows.net/common/oauth2/authorize
Dirección Url de redireccionamiento URL de redireccionamiento para la URL de la aplicación web. El servicio de Azure AD redirige a la dirección url de aplicación web con un código de autenticación. Ejemplo: http://localhost:13526/Redirect

Paso 3: Crear una cadena de consulta para obtener el código de autorización de Azure AD

Para autenticar una aplicación web de Power BI, primero hay que crear una cadena de consulta para redireccionar al servicio de autenticación de Azure AD. Después de proporcionar las credenciales válidas, Azure AD devuelve un código de autorización. El siguiente es un ejemplo de URL de Azure AD completo con cadena de consulta. Use una dirección URL similar a esta para obtener un código de autorización de Azure AD. Use Response.Redirect() para redirigir al servicio de Azure AD que devolverá un código de autorización de Azure AD. Use el código de autorización del paso 4 para adquirir un token de acceso mediante código de autorización.

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

Configuración de la cadena de consulta de autenticación de Power BI

Configuración Descripción
response_type=code Azure AD devuelve un código de autorización.
client_id=1861585d...9a79c296 El Id. de cliente es usado por la aplicación para identificarse a los usuarios a los que están solicitando permisos. Obtenga el identificador de cliente al registrar la aplicación de Azure.
resource= https://analysis.windows.net/powerbi/api Uri de recurso para el recurso de Power BI a autorizar. Debe usar este Uri exacto.
redirect_uri= http://localhost:13526/Redirect Una vez que se autentique el usuario, Azure AD redirigirá de nuevo a la aplicación web.

Este es un ejemplo de código de C# para crear una dirección URL de autorización de Azure AD con una cadena de consulta y redirigir al servicio de autoridad de Azure AD.

Ejemplo: C# de inicio de sesión

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

Paso 4: Adquirir un token de acceso de Azure AD mediante un código de autorización

Para realizar una solicitud de datos en el servicio REST de Power BI, deberá suministrar un token de acceso. En una aplicación web .NET, se usa la Biblioteca de autenticación de Azure AD para el paquete NuGet de .NET para obtener un token de acceso. 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.

En cuanto la aplicación redirija al Uri de entidad de Azure AD y adquiera un código de autorización, la aplicación obtendrá un token por código de autorización. A continuación se indica cómo puede la aplicación obtener el código de autorización y un token de acceso: En una clase de redireccionamiento:

  1. Obtenga el código de autenticación de Azure AD que se devuelve de Azure AD.

    string code = Request.Params.GetValues(0)[0];
    
  2. Cree un AuthenticationContext pasando el URI de la entidad y un TokenCache.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Cree un ClientCredential pasando el identificador de cliente y el secreto de clientede la aplicación de Azure.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Obtenga un token mediante código de autorización pasando el código de autenticación que Azure AD devolvió y una dirección URL de redireccionamiento.

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

    Response.Redirect("/Default.aspx");
    
  6. Establezca una cadena de índice "authResult" de sesión en AuthenticationResult para poder uszar el resultado en la página default.aspx.

    Session["authResult"] = AR;
    

En una página Default.aspx:

  1. Obtenga un AuthenticationResult de la sesión. En el paso 4, use el AuthenticationResult para obtener un AccessTokende autorización.

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

Este es el código completo para adquirir un token de acceso de Azure por código de autorización y redireccione a default.aspx.

Nota : El URI de redireccionamiento debe coincidir con el parámetro redirect_uri que se usa para solicitar el código de autorización.

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

  ...
}

Paso 5: Usar el token de acceso a Azure AD para llamar a una operación de Power BI

Las llamadas de API de REST de Power BI se realizan en nombre de un usuario autenticado pasando un token de acceso adquirido a través de Azure Active Directory, en el encabezado de "Autorización". 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.

Una vez establecido un AuthenticationResult al adquirir un token por código de autorización (AcquireTokenByAuthorizationCode), obtendrá un token de acceso de Azure obteniendo la propiedad AccessToken de AuthenticationResult. Este es el código para obtener conjuntos de datosde Power BI. El ejemplo de código crea una WebRequest y deserializa la cadena de respuesta a un conjunto de datos. Para obtener acceso a la API de REST de Power BI, cree un encabezado de solicitud estableciendo "Autorización" en "Portador {AccessToken}":

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

Ejemplo de C#: obtener conjuntos de datos de 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; }
}

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 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 de la biblioteca de autenticación de Active Directory.
  4. Elija la 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