Скачать пример веб-приложения | Посмотреть код на GitHub: Default.aspx.cs | Redirect.aspx.cs

В этой статье показано, как аутентифицировать веб-приложение Power BI. Она содержит примеры на языке C#. Тем не менее, процесс аутентификации одинаков и для других языков веб-программирования. Существует пример веб-приложения на GitHub. Чтобы узнать, как запустить пример, см. статью Пример веб-приложения.

Веб-приложения Power BI используют Active Directory (AAD) для аутентификации пользователей и защиты приложений. Аутентификация — это процесс идентификации приложения или пользователя. Для идентификации веб-приложения в AAD оно регистрируется в Azure Active Directory. С помощью регистрации веб-приложения в Azure Active Directory вы предоставляете ему доступ к ресурсам REST API Power BI. Дополнительную информацию о регистрации веб-приложения Power BI см. в статье Регистрация веб-приложения.

Дополнительные сведения о процессе авторизации Azure Active Directory (Azure AD) см. в статье Поток Authorization Code Grant.

Примечание. Для Power BI приложения создаются как мультитенантные с помощью портала управления Azure.

Что необходимо для аутентификации веб-приложения Power BI

Ниже приведены шаги для аутентификации веб-приложения Power BI и выполнения веб-запроса REST. Эти шаги применяются к веб-приложению ASP.NET. Однако они подходят и для других платформ. Дополнительную информацию об OAuth 2.0 в Azure AD см. в статье OAuth 2.0 в Azure AD.

Шаг 1. Регистрации веб-приложения

С помощью регистрации веб-приложения в Azure Active Directory вы предоставляете ему доступ к ресурсам REST API Power BI. Чтобы зарегистрировать веб-приложение Power BI, см. статью Регистрация веб-приложения.

Шаг 2. Настройка параметров Power BI для аутентификации в Azure AD

Ниже приведены параметры, которые необходимы для проверки подлинности веб-приложения Power BI в Azure AD.

Параметр Описание Значение
Идентификатор клиента Идентификатор клиента используется приложением для идентификации себя пользователям, у которых запрашиваются разрешения. Чтобы получить идентификатор клиента приложения Power BI, см. раздел Как получить идентификатор клиентского приложения.
Секрет клиента Секретный ключ клиента отправляется вместе с идентификатором клиента при аутентификации в Azure AD для вызова веб-API. Чтобы получить секретный ключ клиента приложения Power BI, см. раздел Как получить секрет клиента.
Универсальный код ресурса (URI) для ресурса Универсальный код ресурса (URI) для авторизации ресурса Power BI. Необходимо использовать именно этот универсальный код ресурса (URI). https://analysis.windows.net/powerbi/api
Универсальный код ресурса (URI) центра Универсальный код ресурса (URI) центра — это ресурс Azure, который принимает идентификатор клиента для получения маркера доступа. https://login.windows.net/common/oauth2/authorize
URL-адрес перенаправления URL-адрес перенаправления — это URL-адрес веб-приложения. Служба Azure AD выполняет перенаправление на URL-адрес веб-приложения с кодом аутентификации. Пример: http://localhost:13526/Redirect

Шаг 3. Создание строки запроса для получения кода авторизации из Azure AD

Для аутентификации веб-приложения Power BI сначала создайте строку запроса URL-адреса для перенаправления в службу аутентификации Azure AD. После предоставления действительных учетных данных Azure AD возвращает код авторизации. Ниже приведен пример полного URL-адреса Azure AD со строкой запроса. Аналогичный URL-адрес используется, чтобы получить код авторизации из Azure AD. Используйте Response.Redirect() для перенаправления в службу Azure AD, которая вернет код авторизации из Azure AD. Используйте код авторизации из шаге 4, чтобы получить маркер доступа по коду авторизации.

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

Параметры строки запроса аутентификации Power BI

Параметр Описание
response_type=code Azure AD возвращает код авторизации.
client_id=1861585d...9a79c296 Идентификатор клиента используется приложением для идентификации себя пользователям, у которых запрашиваются разрешения. Идентификатор клиента предоставляется при регистрации приложения Azure.
resource= https://analysis.windows.net/powerbi/api Универсальный код ресурса (URI) для ресурса Power BI, который должен пройти авторизацию. Необходимо использовать именно этот универсальный код ресурса (URI).
redirect_uri= http://localhost:13526/Redirect После аутентификации пользователя Azure AD выполнит перенаправление обратно в веб-приложение.

Ниже приведен пример на C# для создания URL-адреса авторизации Azure AD со строкой запроса и перенаправления в службу сертификации Azure AD.

Пример реализации входа на 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));       
    }

Шаг 4. Получение маркера доступа Azure AD с помощью кода авторизации

Для выполнения запроса данных к службе REST Power BI необходимо предоставить маркер доступа. В веб-приложении .NET для получения маркера доступа используйте пакет NuGet библиотеки аутентификации Azure AD для .NET. Если у вас нет библиотеки аутентификации Microsoft Azure (ADAL), см. статью Как добавить библиотеку проверки подлинности Azure Active Directory.

После того, как ваше приложение выполнит перенаправление по универсальному коду ресурса (URI) центра Azure AD и получит код авторизации, оно получит маркер по этому коду. Вот как ваше приложение может получить код авторизации и токен доступа: В классе Redirect:

  1. Получите код авторизации Azure AD, полученный из Azure AD.

    string code = Request.Params.GetValues(0)[0];
    
  2. Создайте AuthenticationContext , передающий универсальный код ресурса (URI) центра и TokenCache.

    TokenCache TC = new TokenCache();
    
    AuthenticationContext AC = new AuthenticationContext(authorityUri, TC);
    
  3. Создайте ClientCredential , передающий идентификатор клиента и секрет клиентаприложения Azure.

    ClientCredential cc = new ClientCredential(Properties.Settings.Default.ClientID, Properties.Settings.Default.ClientSecretKey);
    
  4. Получите маркер по коду авторизации, передав код проверки подлинности , возвращенный Azure AD, и URL-адрес перенаправления.

    AuthenticationResult AR = AC.AcquireTokenByAuthorizationCode(code, new Uri(redirectUri), cc);
    
  5. Выполните перенаправление обратно на default.aspx.

    Response.Redirect("/Default.aspx");
    
  6. Присвойте строке индекса authResult сеанса значение AuthenticationResult, чтобы результат можно было использовать на странице default.aspx.

    Session["authResult"] = AR;
    

На странице Default.aspx:

  1. Получите AuthenticationResult из сеанса. На шаге 4 AuthenticationResult используется для получения AccessTokenавторизации.

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

Ниже приведен полный код для получения маркера доступа Azure по коду авторизации и перенаправления на default.aspx.

Примечание. URI перенаправления должен соответствовать redirect_uri, который используется при запросе кода авторизации.

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

  ...
}

Шаг 5. Использование маркера доступа Azure AD для вызова операции Power BI

Вызовы REST API Power BI выполняются от имени пользователя, который аутентифицирован путем передачи маркера доступа, полученного из Azure Active Directory, в заголовке Authorization. После получения маркера доступа из Active Directory (AAD) он используется для выполнения веб-запросов к REST API Power BI.

Задав AuthenticationResult путем получения маркера по коду авторизации (AcquireTokenByAuthorizationCode), можно получить маркер доступа Azure, получив свойство AccessToken для AuthenticationResult. Ниже приведен код для получения наборов данныхPower BI. Пример кода создает WebRequest и десериализует строку ответа в набор данных. Для доступа к REST API Power BI вы создаете параметр заголовка запроса Authorization со значением Bearer {AccessToken}:

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

Пример получения наборов данных Power BI на C#

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

Как добавить библиотеку аутентификации Azure Active Directory

В клиентском приложении .NET AuthenticationContext используется в библиотеке проверки подлинности Active Directory для получения маркера доступа Azure. Пакет NuGet для библиотеки аутентификации Active Directory можно установить из Visual Studio. При установке пакета NuGet Visual Studio создает ссылку на необходимые сборки.

  1. Щелкните решение правой кнопкой мыши.
  2. Выберите «Управление пакетами NuGet».
  3. Найдите библиотеку аутентификации Active Directory (Active Directory Authentication Library).
  4. В списке пакетов выберите библиотеку аутентификации Active Directory и щелкните «Установить».

См. также:

Библиотека проверки подлинности Azure AD для пакета NuGet для .NET
Библиотека проверки подлинности Active Directory (ADAL) версии 1 для .NET
OAuth 2.0 в Azure AD
Авторизация доступа к веб-приложениям с помощью OAuth 2.0 и Azure Active Directory
Сценарии аутентификации в Azure Active Directory
Появились дополнительные вопросы? Ответы на них см. в сообществе Power BI.