소개

보고서를 앱에 통합하는 1단계, Azure AD에 웹앱 등록에서는, 앱이 Azure Active Directory에 인증할 수 있도록 웹 앱을 등록합니다. 이 단계에서는, 액세스 토큰Power BI API를 사용하여 보고서를 가져옵니다.

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를 리디렉션하여 인증 코드를 가져옵니다. 다음은 인증 코드 쿼리 문자열을 생성하고 Azure AD에 리디렉션하는 전체 C# 메서드입니다. 다음 단계에서는, 인증 코드를 사용하여 액세스 토큰을 가져옵니다.

인증 코드 가져오기

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 AD 인증 코드 부여 흐름
보고서 가져오기 작업
3단계: Power BI 보고서를 IFrame에 로드
궁금한 점이 더 있나요? Power BI 커뮤니티를 이용하세요.