Autenticación de usuarios y obtención de un token de acceso de Azure AD para la aplicación de Power BIAuthenticate users and get an Azure AD access token for your Power BI app

Aprenda cómo puede autenticar a los usuarios en la aplicación de Power BI y recuperar un token de acceso para usarlo con la API de REST.Learn how you can authenticate users within your Power BI application and retrieve an access token to use with the REST API.

Para poder llamar a la API de REST de Power BI, es preciso obtener un token de acceso de autenticación de Azure Active Directory (token de acceso).Before you can call the Power BI REST API, you need to get an Azure Active Directory (Azure AD) authentication access token (access token). Se utiliza un token de acceso para permitir el acceso de la aplicación a los paneles, iconos e informes de Power BI.An access token is used to allow your app access to Power BI dashboards, tiles and reports. Para obtener información acerca del flujo del token de acceso de Azure Active Directory, consulte Flujo de concesión de código de autorización de Azure AD.To learn more about Azure Active Directory access token flow, see Azure AD Authorization Code Grant Flow.

En función de cómo vaya a insertar el contenido, el token de acceso se recuperará de forma diferente.Depending on how you are embedding content, the access token will be retrieved differently. En este artículo se utilizan dos enfoques diferentes.Two different approaches are used within this article.

Token de acceso para usuarios de Power BI (el usuario es propietario de los datos)Access token for Power BI users (user owns data)

Este ejemplo tiene validez cuando los usuarios inicien sesión manualmente en Azure AD con su inicio de sesión de la organización.This example is for when your users will manually log into Azure AD with their organziation login. Esto se utiliza cuando se inserta contenido para los usuarios de Power BI que van a acceder al contenido al que tienen acceso en el servicio Power BI.This is used when embedding content for Power BI users that will access content they have access to within the Power BI service.

Obtener un código de autorización de Azure ADGet an authorization code from Azure AD

El primer paso para obtener un token de acceso consiste en obtener un código de autorización de Azure AD.The first step to get an access token is to get an authorization code from Azure AD. Para ello, cree una cadena de consulta con las siguientes propiedades y vuelva a Azure AD.To do this, you construct a query string with the following properties, and redirect to Azure AD.

Cadena de consulta del código de autorizaciónAuthorization code 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
    // https://analysis.windows.net/powerbi/api
    {"resource", Properties.Settings.Default.PowerBiAPI},

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

Después de crear una cadena de consulta, vuelva a Azure AD para obtener un código de autorización.After you construct a query string, you redirect to Azure AD to get an authorization code. A continuación se muestra un método de C# completo para crear una cadena de consulta de código de autorización y volver a Azure AD.Below is a complete C# method to construct an authorization code query string, and redirect to Azure AD. Después obtendrá un token de acceso con el código de autorización.After you have the authorization code, you get an access token using the authorization code.

En redirect.aspx.cs, se llamará a AuthenticationContext.AcquireTokenByAuthorizationCode para que genere el token.Within redirect.aspx.cs, AuthenticationContext.AcquireTokenByAuthorizationCode will then be called to generate the token.

Obtener un código de autorizaciónGet authorization code

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
        // https://analysis.windows.net/powerbi/api
        {"resource", Properties.Settings.Default.PowerBiAPI},

        //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
    // AADAuthorityUri = https://login.windows.net/common/oauth2/authorize/
    string authorityUri = Properties.Settings.Default.AADAuthorityUri;
    var authUri = String.Format("{0}?{1}", authorityUri, queryString);
    Response.Redirect(authUri);
}

Obtener un token de acceso del código de autorizaciónGet an access token from authorization code

Ahora debe tener un código de autorización de Azure AD.You should now have an authorization code from Azure AD. Una vez que Azure AD vuelve a su aplicación web con un código de autorización, utiliza el código de autorización para obtener un token de acceso.Once Azure AD redirects back to your web app with an authorization code, you use the authorization code to get an access token. A continuación se muestra un ejemplo de C# que se puede usar en la página de redireccionamiento y el evento Page_Load de la página default.aspx.Below is a C# sample that you could use in your redirect page and the Page_Load event for your default.aspx page.

El espacio de nombres Microsoft.IdentityModel.Clients.ActiveDirectory se puede recuperar del paquete NuGet Biblioteca de autenticación de Active Directory.The Microsoft.IdentityModel.Clients.ActiveDirectory namespace can be retrieved from the Active Directory Authentication Library NuGet package.

Install-Package Microsoft.IdentityModel.Clients.ActiveDirectory

Redirect.aspx.csRedirect.aspx.cs

using Microsoft.IdentityModel.Clients.ActiveDirectory;

protected void Page_Load(object sender, EventArgs e)
{
    //Redirect uri must match the redirect_uri used when requesting Authorization code.
    string redirectUri = String.Format("{0}Redirect", Properties.Settings.Default.RedirectUrl);
    string authorityUri = Properties.Settings.Default.AADAuthorityUri;

    // 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[_Default.authResultString] = AR;

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

Default.aspxDefault.aspx

using Microsoft.IdentityModel.Clients.ActiveDirectory;

protected void Page_Load(object sender, EventArgs e)
{

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

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

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

Token de acceso para usuarios que no sean de Power BI (la aplicación es propietaria de los datos)Access token for non-Power BI users (app owns data)

Este enfoque se usa normalmente para aplicaciones del tipo ISV en las que la aplicación es propietaria del acceso a los datos.This approach is typically used for ISV type applications where the app owns access to the data. Los usuarios no será necesariamente de Power BI y la aplicación controla la autenticación y el acceso de los usuarios finales.Users will not necessarily be Power BI users and the application controls authentication and access for the end users.

Para este enfoque se utilizará una sola cuenta principal que es un usuario de Power BI Pro.For this approach, you will use a single master account that is a Power BI Pro user. Las credenciales de esta cuenta se almacenan con la aplicación.The credentials for this account are stored with the application. La aplicación se autenticará en Azure AD con esas credenciales almacenadas.The application will authenticate against Azure AD with those stored credentials. El código de ejemplo que se muestra a continuación proviene del ejemplo de App owns dataThe example code shown below comes from the App owns data sample

HomeController.csHomeController.cs

using Microsoft.IdentityModel.Clients.ActiveDirectory;

// Create a user password cradentials.
var credential = new UserPasswordCredential(Username, Password);

// Authenticate using created credentials
var authenticationContext = new AuthenticationContext(AuthorityUrl);
var authenticationResult = await authenticationContext.AcquireTokenAsync(ResourceUrl, ClientId, credential);

if (authenticationResult == null)
{
    return View(new EmbedConfig()
    {
        ErrorMessage = "Authentication Failed."
    });
}

var tokenCredentials = new TokenCredentials(authenticationResult.AccessToken, "Bearer");

Para obtener información acerca de cómo usar await, consulte await (referencia de C#)For information on how to use await, see await (C# Reference)

Pasos siguientesNext steps

Ahora que tiene el token de acceso, puede llamar a la API de REST de Power BI para insertar contenido.Now that you have the access token, you can call the Power BI REST API to embed content. Para más información sobre la inserción de contenido, consulte Procedimiento para insertar paneles, informes e iconos de Power BI.For information on how to embed your content, see How to embed your Power BI dashboards, reports and tiles.

¿Tiene más preguntas?More questions? Pruebe a preguntar a la comunidad de Power BITry asking the Power BI Community