Autenticar usuários e obter um token de acesso do Azure AD para o aplicativo Power BIAuthenticate users and get an Azure AD access token for your Power BI app

Saiba como você pode autenticar usuários no aplicativo do Power BI e recuperar um token de acesso para usar com a API REST.Learn how you can authenticate users within your Power BI application and retrieve an access token to use with the REST API.

Antes de chamar a API REST do Power BI, você precisa obter um token de acesso de autenticação (token de acesso) do Azure AD (Azure Active Directory).Before you can call the Power BI REST API, you need to get an Azure Active Directory (Azure AD) authentication access token (access token). Um token de acesso é usado para permitir que seu aplicativo acesse os painéis, blocos e relatórios do Power BI.An access token is used to allow your app access to Power BI dashboards, tiles and reports. Para saber mais sobre o fluxo do token de acesso do Azure Active Directory, veja Fluxo de concessão de código de autorização do Azure AD.To learn more about Azure Active Directory access token flow, see Azure AD Authorization Code Grant Flow.

Dependendo de como você insere o conteúdo, o token de acesso será recuperado de maneira diferente.Depending on how you are embedding content, the access token will be retrieved differently. Duas abordagens diferentes são usadas neste artigo.Two different approaches are used within this article.

Token de acesso para usuários do Power BI (o usuário possui dados)Access token for Power BI users (user owns data)

Este exemplo refere-se a quando os usuários farão logon manualmente no Azure AD com o logon da organização.This example is for when your users will manually log into Azure AD with their organziation login. Isso é usado ao inserir conteúdo para usuários do Power BI que acessarão o conteúdo ao qual eles têm acesso no serviço do 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.

Obter um código de autorização do Azure ADGet an authorization code from Azure AD

A primeira etapa para obter um token de acesso é obter um código de autorização do Azure AD.The first step to get an access token is to get an authorization code from Azure AD. Para fazer isso, você constrói uma cadeia de caracteres de consulta com as propriedades a seguir e a redireciona para o Azure AD.To do this, you construct a query string with the following properties, and redirect to Azure AD.

Cadeia de caracteres de consulta do código de autorizaçãoAuthorization 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"}
};

Depois de construir uma cadeia de caracteres de consulta, você a redireciona para o Azure AD para obter um código de autorização.After you construct a query string, you redirect to Azure AD to get an authorization code. Veja abaixo um método em C# completo para construir uma cadeia de caracteres de consulta do código de autorização e redirecioná-la para o Azure AD.Below is a complete C# method to construct an authorization code query string, and redirect to Azure AD. Depois de conseguir o código de autorização, obtenha um token de acesso usando o código de autorização.After you have the authorization code, you get an access token using the authorization code.

Em redirect.aspx.cs, AuthenticationContext.AcquireTokenByAuthorizationCode será chamado em seguida para gerar o token.Within redirect.aspx.cs, AuthenticationContext.AcquireTokenByAuthorizationCode will then be called to generate the token.

Obter o código de autorizaçãoGet 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);
}

Obter um token de acesso do código de autorizaçãoGet an access token from authorization code

Agora você deve ter um código de autorização do Azure AD.You should now have an authorization code from Azure AD. Depois que o Azure AD redirecionar de volta para seu aplicativo Web com um código de autorização, você usa o código de autorização para obter um token de acesso.Once Azure AD redirects back to your web app with an authorization code, you use the authorization code to get an access token. Veja abaixo uma amostra do C# que pode ser usada na página de redirecionamento e no evento Page_Load da 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.

O namespace Microsoft.IdentityModel.Clients.ActiveDirectory pode ser recuperado no pacote NuGet da Biblioteca de Autenticação do 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 acesso para usuários que não têm o Power BI (o aplicativo possui dados)Access token for non-Power BI users (app owns data)

Normalmente, essa abordagem é usada para aplicativos do tipo ISV em que o aplicativo possui acesso aos dados.This approach is typically used for ISV type applications where the app owns access to the data. Os usuários não serão necessariamente usuários do Power BI e o aplicativo controla a autenticação e o acesso para os usuários finais.Users will not necessarily be Power BI users and the application controls authentication and access for the end users.

Para essa abordagem, você usará uma única conta mestre que é um usuário do Power BI Pro.For this approach, you will use a single master account that is a Power BI Pro user. As credenciais dessa conta são armazenadas no aplicativo.The credentials for this account are stored with the application. O aplicativo fará a autenticação no Azure AD com essas credenciais armazenadas.The application will authenticate against Azure AD with those stored credentials. O código de exemplo mostrado abaixo foi obtido da amostra O aplicativo possui dadosThe 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 obter informações sobre como usar await, consulte await (referência do C#)For information on how to use await, see await (C# Reference)

Próximas etapasNext steps

Agora que você tem o token de acesso, chame a API REST do Power BI para inserir o conteúdo.Now that you have the access token, you can call the Power BI REST API to embed content. Para obter informações sobre como inserir o conteúdo, consulte Como inserir os dashboards, relatórios e blocos do Power BI.For information on how to embed your content, see How to embed your Power BI dashboards, reports and tiles.

Mais perguntas?More questions? Experimente perguntar à Comunidade do Power BITry asking the Power BI Community