Скачать пример клиентского приложения .NET | Посмотреть код на GitHub

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

Полный пример на языке C#, в котором показано, как аутентифицировать клиентское приложение Power BI, см. в статье Пример клиентского приложения.

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

Вызовы REST API Power BI выполняются от имени пользователя, прошедшего аутентификацию. Для этого в заголовке запроса Authorization передается маркер. Маркер можно получить с помощью Azure Active Directory.

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

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

Чтобы аутентифицировать клиентское приложение Power BI и выполнить веб-запрос REST, сделайте следующее:

  1. Зарегистрируйте клиентское приложение. Дополнительную информацию о регистрации клиентского приложения Power BI см. в статье Регистрация клиентского приложения. С помощью регистрации клиентского приложения в Azure Active Directory вы предоставляете ему доступ к API Power BI.
  2. Назначьте идентификатор клиента для приложения. Дополнительную информацию о получении идентификатора клиента для приложения см. в разделе Как получить идентификатор клиентского приложения. Идентификатор клиента используется приложением для идентификации себя пользователям, у которых запрашиваются разрешения.
    • В коде клиентского приложения присвойте переменной clientID идентификатор клиента приложения Azure.
  3. Назначьте универсальный код ресурса (URI) перенаправления. Для клиентского приложения универсальный код ресурса (URI) перенаправления позволяет AAD получить дополнительную информацию о конкретном приложении, для которого будет выполнена аутентификация. Универсальный код ресурса (URI) — это значение, позволяющее определить имя ресурса.

    • В коде клиентского приложения назначьте параметру redirectUri значение https://login.live.com/oauth20_desktop.srf. Поскольку клиентское приложение не имеет внешней службы для перенаправления, этот универсальный код ресурса (URI) является стандартным заполнителем для клиентских приложений.
  4. Назначьте универсальный код ресурса (URI) для API Power BI. Универсальный код ресурса (URI) определяет ресурс API Power BI.

    • В коде клиентского приложения присвойте переменной resourceUri адрес https://analysis.windows.net/powerbi/api.
  5. Назначьте универсальный код ресурса (URI) центра OAuth2. Универсальный код ресурса (URI) центра определяет ресурс центра OAuth2.

    • В коде клиентского приложения назначьте URI центра адресу https://login.windows.net/common/oauth2/authorize.
  6. Назначьте универсальный код ресурса (URI) наборов данных для наборов данных API Power BI. Универсальный код ресурса (URI) наборов данных определяет ресурс наборов данных API Power BI.

    • В коде клиентского приложения присвойте переменной datasetsUri адрес https://api.powerbi.com/v1.0/myorg/datasets.

Для выполнения запроса данных к службе REST Power BI необходимо предоставить маркер доступа. Чтобы получить токен доступа в клиентском приложении .NET, используйте пакет NuGet библиотеки аутентификации Azure AD для .NET. Вот как это делается. Ниже приведен пример метода AccessToken().

Если у вас нет библиотеки аутентификации Microsoft Azure (ADAL), см. статью Как добавить библиотеку проверки подлинности Azure Active Directory.

Примечание. Чтобы аутентифицировать клиентское приложение, необходимо добавить ссылку на пакет Microsoft.IdentityModel.Clients.ActiveDirectory, содержащийся в библиотеке аутентификации Microsoft Azure (ADAL).

Получение маркера доступа

  1. Создайте экземпляр класса AuthenticationContext. AuthenticationContext — основной класс, представляющий маркер, который выдает центр для ресурсов Azure AD. Конструктор принимает:

    • authorityUri OAuth2;
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. Вызовите метод AuthenticationContext.AcquireToken(), чтобы получить маркер. Этот метод принимает:

    • переменную resourceUri API Power BI;
    • переменную clientID приложения Power BI;
    • переменную redirectUri приложения Power BI.
    string token = authContext.AcquireToken(resourceUri, clientId, new Uri(redirectUri), PromptBehavior.RefreshSession).AccessToken;
    

Дополнительную информацию о том, какие действия выполняет AuthenticationContext, чтобы получить маркер, см. в статье Процесс получения контекста аутентификации Azure.

Пример на языке C#. Получение маркера доступа

Чтобы получить маркер доступа в клиентском приложении .NET, используйте класс AuthenticationContext.

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

Запрос данных в REST API Power BI с помощью маркера

После получения маркера доступа из Active Directory (AAD) его нужно использовать, чтобы сделать веб-запрос в REST API Power BI. Чтобы создать веб-запрос REST Power BI, добавьте маркер доступа в заголовок запроса, как показано ниже:

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

Пример на языке C#. Выполнение запроса данных REST API Power BI с помощью маркера

Полный пример на C#, демонстрирующий способы аутентификации клиентского приложения Power BI и вызова всех операций REST Power BI, см. в статье Пример клиентского приложения. Также можно просмотреть код на сайте 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; }
}

Процесс получения контекста аутентификации Azure

Чтобы получить маркер доступа Azure в клиентском приложении .NET, используйте AuthenticationContext . AuthenticationContext — основной класс, представляющий центр выдачи маркеров для ресурсов Azure AD. AuthenticationContext выполняет следующие действия.

  1. AuthenticationContext начинает процесс, перенаправляя агента пользователя к конечной точке авторизации Azure Active Directory. Пользователь проходит аутентификацию и дает согласие, если оно требуется.

  2. Конечная точка авторизации Azure Active Directory перенаправляет агента пользователя к AuthenticationContext с кодом авторизации. Агент пользователя возвращает код авторизации URI перенаправления клиентского приложения.

  3. AuthenticationContext запрашивает маркер доступа у конечной точки выдачи маркера Azure Active Directory. Класс представляет код авторизации, чтобы доказать, что пользователь дал свое согласие.

  4. Конечная точка выдачи маркера Azure Active Directory возвращает маркер доступа.

  5. Клиентское приложение использует маркер доступа для аутентификации веб-API.

  6. После аутентификации клиентского приложения REST API Power BI возвращает запрошенные данные.

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

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

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

  1. Щелкните решение правой кнопкой мыши.

  2. Выберите Управление пакетами NuGet.

  3. Найдите библиотеку проверки подлинности Active Directory.

  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.