Baixar o exemplo de aplicativo Web | Exibir o código no GitHub: Default.aspx.cs | Redirect.aspx.cs

Este artigo mostra como autenticar um aplicativo Web do Power BI. Ele inclui exemplos em C#; entretanto, o processo de autenticação é igual ao de outras linguagens de programação da Web. Há um exemplo de aplicativo Web no GitHub. Para saber como executar o exemplo, veja Exemplo de aplicativo Web.

Os aplicativos Web do Power BI usam o AAD (Active Directory) 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 Web no AAD, você deve registrar seu aplicativo com o AAD. Ao registrar um aplicativo Web no AAD, você concede acesso aos recursos da API REST do Power BI ao seu aplicativo. Para saber como registrar seu aplicativo Web do Power BI, veja Registrar um aplicativo Web.

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.

OBSERVAÇÃO Para o 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 Web do Power BI

Veja as etapas para autenticar um aplicativo Web do Power BI e executar uma solicitação da Web REST. As etapas se aplicam a um aplicativo Web ASP.NET, mas também a outras plataformas. Para saber mais sobre o OAuth 2.0 no Azure AD, veja OAuth 2.0 no Azure AD.

Etapa 1 – Registre o aplicativo Web

Ao registrar um aplicativo Web no Active Directory do Azure, você dá acesso aos recursos da API REST do Power BI para o aplicativo. Para registrar um aplicativo Web do Power BI, veja Registrar um aplicativo Web.

Etapa 2 – Defina as configurações do Power BI para autenticar com o AD do Azure

Aqui estão configurações de que você precisa para autenticar um aplicativo Web do Power BI com o AD do Azure.

Configuração Descrição Valor
ID do Cliente A ID do Cliente é usada pelo aplicativo para se identificar aos usuários dos quais ele está solicitando permissões. Para obter uma ID do cliente do aplicativo Power BI, veja Como obter uma ID do aplicativo cliente.
Segredo do Cliente A chave secreta do cliente enviada juntamente com uma ID do Cliente ao autenticar no AD do Azure para chamar uma API Web. Para obter uma chave secreta do cliente do aplicativo do Power BI, veja Como obter uma chave secreta do cliente.
URI de Recurso O URI do recurso do Power BI a ser autorizado. Você deve usar exatamente este URI. https://analysis.windows.net/powerbi/api
URI de Autoridade O URI de autoridade é um recurso do Azure que usa uma ID do cliente para obter um token de acesso. https://login.windows.net/common/oauth2/authorize
URL de Redirecionamento Uma URL de Redirecionamento da URL do aplicativo Web. O serviço do AD do Azure redireciona de volta para a URL do aplicativo Web com um código de autenticação. Exemplo: http://localhost:13526/Redirect

Etapa 3 – Crie uma cadeia de caracteres de consulta para obter o código de autorização do AD do Azure

Para autenticar um aplicativo Web do Power BI, primeiro crie uma cadeia de caracteres de consulta de URL para redirecionar para o serviço de autenticação do AD do Azure. Depois de fornecer credenciais válidas, o AD do Azure retorna um código de autorização. Veja a seguir um exemplo de uma URL totalmente qualificada do AD do Azure com uma cadeia de caracteres de consulta. Você usa uma URL semelhante a esta para obter um código de autorização do AD do Azure. Use Response.Redirect() para redirecionar para o serviço do AD do Azure que retornará um código de autorização do AD do Azure. Você usa o código de autorização da etapa 4 para adquirir um token de acesso pelo código de autorização.

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

Configurações das cadeias de caracteres de consulta de autenticação do Power BI

Configuração Descrição
response_type=code O AD do Azure retorna um código de autorização.
client_id=1861585d...9a79c296 A ID do Cliente é usada pelo aplicativo para se identificar aos usuários dos quais ele está solicitando permissões. Você obtém a ID do cliente ao registrar o aplicativo do Azure.
resource= https://analysis.windows.net/powerbi/api O URI do recurso do Power BI a ser autorizado. Você deve usar exatamente este URI.
redirect_uri= http://localhost:13526/Redirect Após a autenticação do usuário, o AD do Azure será redirecionado de volta ao aplicativo Web.

Veja um exemplo de código em C# para criar uma URL de autorização do AD do Azure com uma cadeia de caracteres de consulta e redirecionar para o serviço de autoridade do AD do Azure.

Exemplo – Entrar em C#

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

Etapa 4 – Adquira um token de acesso do AD do Azure usando o código de autorização

Para fazer uma solicitação de dados ao serviço REST do Power BI, você precisa fornecer um token de acesso. Em um aplicativo Web do .NET, use a Biblioteca de Autenticação do Azure AD para o pacote NuGet do .NET para obter um token de acesso. 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.

Após o aplicativo redirecionar para o URI de autoridade do AD do Azure e adquirir um código de autorização, o aplicativo obtém um token pelo código de autorização. Veja como seu aplicativo pode obter o código de autorização e um token de acesso: Em uma classe Redirecionar:

  1. Obtenha o código de autenticação do AD do Azure que é retornado do AD do Azure.

    string code = Request.Params.GetValues(0)[0];
    
  2. Crie um AuthenticationContext passando o URI de autoridade e um TokenCache.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Crie uma ClientCredential passando a ID do cliente do aplicativo do Azure e o Segredo do Clientedo aplicativo do Azure.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Obtenha um token pelo código de autorização passando o código de autenticação retornado pelo AD do Azure e uma URL de redirecionamento.

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. Redirecione de volta para default.aspx.

    Response.Redirect("/Default.aspx");
    
  6. Defina uma cadeia de caracteres de índice "authResult" de sessão como AuthenticationResult para poder usar o resultado na página default.aspx.

    Session["authResult"] = AR;
    

Em uma página Default.aspx:

  1. Obtenha um AuthenticationResult da Sessão. Na Etapa 4, você usa o AuthenticationResult para obter uma autorização AccessToken.

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

Veja o código completo para adquirir um token de acesso do Azure pelo código de autorização e redirecionar de volta para default.aspx.

Observação O URI de redirecionamento deve coincidir com o redirect_uri usado ao solicitar o código de autorização.

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

  ...
}

Etapa 5 – Use o token de acesso do AD do Azure para chamar uma operação do Power BI

As chamadas da API REST do Power BI são feitas em nome de um usuário autenticado ao passar um token de acesso adquirido por meio do Active Directory do Azure no cabeçalho "Autorização". 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.

Após definir um AuthenticationResult ao adquirir um token pelo código de autorização (AcquireTokenByAuthorizationCode), você obtém um token de acesso do Azure ao obter a propriedade AccessToken de AuthenticationResult. Veja o código para obter conjuntos de dadosdo Power BI. O exemplo de código cria uma WebRequest e desserializa a cadeia de caracteres de resposta para um conjunto de dados. Para acessar a API REST do Power BI, crie um cabeçalho de solicitação definindo "Autorização" como "Portador {AccessToken}":

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

Exemplo em C# – Obter conjunto de dados do 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; }
}

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