Baixar o exemplo de aplicativo cliente do .NET | Exibir o código no GitHub

Este artigo mostra como autenticar um aplicativo cliente do Power BI. Ele inclui exemplos em C#; entretanto, o processo de autenticação é igual ao de outras linguagens de programação.

Para obter um exemplo completo em C# que mostra como autenticar um aplicativo cliente do Power BI, veja Exemplo de aplicativo cliente.

Os aplicativos cliente do Power BI usam o AAD (Active Directory do Azure) para autenticar os usuários e proteger os aplicativos. A autenticação é o processo de identificação de um usuário ou aplicativo. Para identificar seu aplicativo cliente no AAD, você deve registrar seu aplicativo com o AAD. Ao registrar um aplicativo cliente no AAD, você concede o acesso às APIs do Power BI para o aplicativo. Para saber como registrar seu aplicativo cliente do Power BI, veja Registrar um aplicativo cliente.

As chamadas da API REST do Power BI são feitas em nome de um usuário autenticado ao passar um token no cabeçalho "Autorização" da solicitação. O token é adquirido por meio do Active Directory do Azure.

Observação : na Visualização Privada do Power BI, os aplicativos são criados como aplicativos de tipo multilocatário usando o Portal de Gerenciamento do Azure.

O que você precisa para autenticar um aplicativo cliente do Power BI

Para autenticar um aplicativo cliente do Power BI e executar uma solicitação da Web REST, você precisa:

  1. Registrar seu aplicativo cliente – Para registrar um aplicativo cliente do Power BI, veja Registrar um aplicativo cliente. Ao registrar um aplicativo cliente no Active Directory do Azure, você concede, às APIs do Power BI, acesso ao aplicativo.
  2. Atribuir a ID do cliente ao seu aplicativo – Para obter a ID do cliente para seu aplicativo, veja Como obter uma ID do aplicativo cliente. A ID do Cliente é usada pelo aplicativo para se identificar aos usuários dos quais ele está solicitando permissões.
    • No código do seu aplicativo cliente, atribua uma variável clientID à ID do cliente do aplicativo do Azure.
  3. Atribuir o URI de redirecionamento – Para um aplicativo cliente, um URI de redirecionamento fornece ao AAD mais detalhes sobre o aplicativo específico que será autenticado. Um URI (Uniform Resource Identifier) é um valor para identificar o nome de um recurso.

    • No código do seu aplicativo cliente, atribua o redirectUri para "https://login.live.com/oauth20_desktop.srf". Como um aplicativo cliente não tem um serviço externo para o qual redirecionar, esse URI é o espaço reservado padrão para aplicativos cliente.
  4. Atribuir o URI do recurso à API do Power BI - O URI do recurso identifica o recurso da API do Power BI.

    • No código do aplicativo cliente, atribua o resourceUri a "https://analysis.windows.net/powerbi/api".
  5. Atribuir o URI de autoridade do OAuth2 - O URI de autoridade identifica o recurso de autoridade do OAuth2.

    • No código do aplicativo cliente, atribua um URI de autoridade a "https://login.windows.net/common/oauth2/authorize".
  6. Atribuir o URI do conjunto de dados da API do Power BI – O URI dos conjuntos de dados identifica o recurso de conjunto de dados da API do Power BI.

    • No código do aplicativo cliente, atribua o datasetsUri a "https://api.powerbi.com/v1.0/myorg/datasets".

Para fazer uma solicitação de dados ao serviço REST do Power BI, você precisa fornecer um token de acesso. Em um aplicativo cliente do .NET, use a Biblioteca de Autenticação do Azure AD para o pacote NuGet do .NET para obter um token de acesso. Acompanhe o processo a seguir. Veja abaixo um exemplo do método AccessToken().

Se você não tiver a ADAL do Microsoft Azure (Biblioteca de Autenticação), veja Como adicionar a Biblioteca de Autenticação do Azure Active Directory.

Importante: Para autenticar um aplicativo cliente, você deve adicionar uma referência a Microsoft.IdentityModel.Clients.ActiveDirectory, que está incluído na ADAL (Biblioteca de Autenticação) do Microsoft Azure.

Etapas para obter um token de acesso

  1. Criar uma instância de AuthenticationContext -AuthenticationContext é a classe principal que representa o token que emite a autoridade para os recursos do AD do Azure. O construtor usa:

    • Um authorityUri OAuth2
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. Chamar o AuthenticationContext.AcquireToken() para obter um token - O método usa:

    • O resourceUri da API do Power BI
    • A clientID do aplicativo do Power BI
    • O redirectUri do aplicativo do Power BI
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

Para obter mais informações sobre o que AuthenticationContext faz para obter um token, veja Fluxo do contexto de autenticação do Azure.

Exemplo em C# – Obter token de acesso

Em um aplicativo cliente .NET, use AuthenticationContext para obter um token de acesso.

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

Fazer uma solicitação de dados à API REST do Power BI usando um token

Depois de obter um token de acesso do AAD (Active Directory), use o token para fazer uma solicitação Web à API REST do Power BI. Para criar uma solicitação da Web REST do Power BI, você pode adicionar um token de acesso ao cabeçalho de solicitação como:

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

Exemplo em C# – Solicitação de dados da API REST do Power BI usando um token

Para obter um exemplo completo em C# que mostra como autenticar um aplicativo cliente do Power BI e chamar todas as operações REST do Power BI, veja Exemplo de aplicativo cliente ou exibir o código no 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; }
}

Fluxo do contexto de autenticação do Azure

Em um aplicativo cliente .NET, use AuthenticationContext para adquirir um token de acesso do Azure. AuthenticationContext é a classe principal que representa o token que emite a autoridade para os recursos do AD do Azure. AuthenticationContext faz o seguinte:

  1. AuthenticationContext inicia o fluxo ao redirecionar o agente do usuário para o ponto de extremidade de autorização do Active Directory do Azure. O usuário é autenticado e consente se o consentimento for necessário.

  2. O ponto de extremidade de autorização do Active Directory do Azure redireciona o agente do usuário de volta a AuthenticationContext com um código de autorização. O agente do usuário retorna um código de autorização ao URI de redirecionamento do aplicativo cliente.

  3. O AuthenticationContext solicita um token de acesso do ponto de extremidade de emissão de token do Active Directory do Azure. Ele apresenta o código de autorização para comprovar que o usuário consentiu.

  4. O ponto de extremidade de emissão de token do Active Directory do Azure retorna um token de acesso.

  5. O aplicativo cliente usa o token de acesso para autenticar para a API Web.

  6. Depois de autenticar o aplicativo cliente, a API REST do Power BI retorna os dados solicitados.

Para saber mais sobre o fluxo de autorização do Azure AD (Azure Active Directory), veja Fluxo de concessão de código de autorização.

Como adicionar a Biblioteca de Autenticação do Active Directory do Azure

Em um aplicativo cliente .NET, você deve usar AuthenticationContext na Biblioteca de Autenticação do Active Directory para adquirir um token de acesso do Azure. Você pode instalar o pacote NuGet da Biblioteca de Autenticação do Active Directory por meio do Visual Studio. Ao instalar um pacote NuGet, o Visual Studio cria uma referência para os assemblies necessários.

  1. Clique com o botão direito do mouse em uma solução.

  2. Escolha Gerenciar Pacotes NuGet.

  3. Pesquise Biblioteca de Autenticação do Active Directory.

  4. Escolha Biblioteca de Autenticação do Active Directory na lista de pacotes e clique em Instalar.

Consulte também

Biblioteca de Autenticação do Azure AD para o pacote NuGet .NET
ADAL (Biblioteca de Autenticação do Active Directory) v1 para .NET
OAuth 2.0 no Azure AD
Fluxo de concessão de código de autorização
Cenários de autenticação do Azure AD
Mais perguntas? Experimente a Comunidade do Power BI