Введение

В шаге 1 (Регистрация веб-приложения в Azure AD) процедуры интеграции отчета в приложение вы регистрируете веб-приложение, чтобы оно могло пройти проверку подлинности в Azure Active Directory. На этом шаге используется токен доступа и API Power BI для получения отчета.

Для получения отчета Power BI используется операция Получение отчетов, возвращающая список отчетов Power BI. В списке отчетов можно получить embedUrl отчета. После получения embedUrl отчета можно загрузить отчет в IFrame.

Перед вызовом операции Получение отчетов или любой другой операции Power BI следует получить токен доступа для проверки подлинности (токен доступа) Azure Active Directory. Токен доступа позволяет вашему приложению обратиться к отчетам Power BI. Дополнительные сведения об использовании токена доступа Azure Active Directory см. в статье Поток предоставления кода авторизации Azure AD. В следующем разделе описано получение токена доступа в веб-приложении.

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

Далее приведены действия по получению токена доступа для вызова операции Power BI.

Шаг 1. Получение кода авторизации из Azure AD

Первый шаг при получении токена доступа заключается в получении кода авторизации из Azure AD. Для этого создайте строку запроса со следующими свойствами и выполните перенаправление в Azure AD.

Строка запроса для кода авторизации

var @params = new NameValueCollection
{
    //Azure AD will return an authorization code.
    {"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", Settings.Default.ClientID},

    //Resource uri to the Power BI resource to be authorized
    //The resource uri is hard-coded for sample purposes
    {"resource", "https://analysis.windows.net/powerbi/api"},

    //After app authenticates, Azure AD will redirect back to the web app. In this sample, Azure AD redirects back
    //to Default page (Default.aspx).
    { "redirect_uri", Settings.Default.RedirectUri}
};

После создания строки запроса выполните перенаправление в Azure AD для получения кода авторизации. Ниже приведен полный метод C# для создания строки запроса кода авторизации и перенаправления в Azure AD. В следующем шаге вы получаете токен доступа с помощью кода авторизации.

Получение кода авторизации

public void GetAuthorizationCode()
{
    //NOTE: Values are hard-coded for sample purposes.
    //Create a query string
    //Create a sign-in NameValueCollection for query string
    var @params = new NameValueCollection
    {
        //Azure AD will return an authorization code.
        {"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", Settings.Default.ClientID},

        //Resource uri to the Power BI resource to be authorized
        //The resource uri is hard-coded for sample purposes
        {"resource", "https://analysis.windows.net/powerbi/api"},

        //After app authenticates, Azure AD will redirect back to the web app. In this sample, Azure AD redirects back
        //to Default page (Default.aspx).
        { "redirect_uri", Settings.Default.RedirectUri}
    };

    //Create sign-in query string
    var queryString = HttpUtility.ParseQueryString(string.Empty);
    queryString.Add(@params);

    //Redirect to Azure AD Authority
    //  Authority Uri is an Azure resource that takes a client id and client secret to get an Access token
    //  QueryString contains
    //      response_type of "code"
    //      client_id that identifies your app in Azure AD
    //      resource which is the Power BI API resource to be authorized
    //      redirect_uri which is the uri that Azure AD will redirect back to after it authenticates

    //Redirect to Azure AD to get an authorization code
    Response.Redirect(String.Format("https://login.windows.net/common/oauth2/authorize?{0}", queryString));
}

Шаг 2. Получение токена доступа из кода авторизации

В шаге 1 при получении токена доступа вы получаете код авторизации из Azure AD. Когда Azure AD выполняет перенаправление обратно в веб-приложение с использованием кода авторизации, можно воспользоваться кодом авторизации для получения токена доступа. Ниже приведен метод C# для получения токена доступа. В следующем разделе вы получаете отчет с помощью токена доступа.

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

public string GetAccessToken(string authorizationCode, string clientID, string clientSecret, string redirectUri)
{
    //Redirect uri must match the redirect_uri used when requesting Authorization code.
    //Note: If you use a redirect back to Default, as in this sample, you need to add a forward slash
    //such as http://localhost:13526/

    // Get auth token from auth code       
    TokenCache TC = new TokenCache();

    //Values are hard-coded for sample purposes
    string authority = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext AC = new AuthenticationContext(authority, TC);
    ClientCredential cc = new ClientCredential(clientID, clientSecret);

    //Set token from authentication result
    return AC.AcquireTokenByAuthorizationCode(
        authorizationCode,
        new Uri(redirectUri), cc).AccessToken;
}

Получение отчета с помощью токена доступа

После получения токена доступа можно вызвать операцию Получение отчетов. Операция Получение отчетов возвращает список отчетов. Отчет можно получить в списке отчетов. Ниже приведен полный метод C# для получения отчета. После получения отчета можно загрузить его в IFrame. См. статью Шаг 3. Загрузка отчета Power BI в IFrame.

Получение отчета

protected void GetReport(int index)
{
    //Configure Reports request
    System.Net.WebRequest request = System.Net.WebRequest.Create(
        String.Format("{0}/Reports",
        baseUri)) as System.Net.HttpWebRequest;

    request.Method = "GET";
    request.ContentLength = 0;
    request.Headers.Add("Authorization", String.Format("Bearer {0}", accessToken.Value));

    //Get Reports 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()))
        {
            //Deserialize JSON string
            PBIReports Reports = JsonConvert.DeserializeObject<PBIReports>(reader.ReadToEnd());

            //Sample assumes at least one Report.
            //You could write an app that lists all Reports
            if (Reports.value.Length > 0)
                ReportEmbedUrl.Text = Reports.value[index].embedUrl;
        }
    }
}

//Power BI Reports used to deserialize the Get Reports response.
public class PBIReports
{
    public PBIReport[] value { get; set; }
}
public class PBIReport
{
    public string id { get; set; }
    public string name { get; set; }
    public string webUrl { get; set; }
    public string embedUrl { get; set; }
}

Дальнейшие действия

Чтобы интегрировать отчет в приложение, загрузите отчет в IFrame. В следующем шаге вы узнаете, как загрузить отчет в IFrame.

Дальнейшие действия >

См. также:

Регистрация бесплатной учетной записи Power BI с пользовательским клиентом каталога Azure Active Directory
Пошаговое руководство по интеграции отчета в приложение
Пример интеграции отчета
Настройка примера интеграции отчета
Авторизация доступа к веб-приложениям с помощью OAuth 2.0 и Azure Active Directory
Операция получения отчетов
Шаг 3. Загрузка отчета Power BI в IFrame
Появились дополнительные вопросы? Ответы на них см. в сообществе Power BI.