.NET 클라이언트 앱 샘플 다운로드 | GitHub에서 코드 보기

이 문서에서는 Power BI 클라이언트 앱을 인증하는 방법을 보여 줍니다. 여기에는 C#의 예제가 포함되어 있지만 다른 프로그래밍 언어의 인증 프로세스도 동일합니다.

Power BI 클라이언트 앱을 인증하는 방법을 보여 주는 전체 C# 샘플은 클라이언트 앱 샘플을 참조하세요.

Power BI 클라이언트 앱은 AAD(Azure Active Directory) 를 사용하여 사용자를 인증하고 응용 프로그램을 보호합니다. 인증은 앱 또는 사용자를 식별하는 프로세스입니다. AAD에서 클라이언트 앱을 식별하려면 AAD에 앱을 등록합니다. AAD에 클라이언트 앱을 등록하면 앱에 Power BI API에 대한 액세스 권한이 부여됩니다. Power BI 클라이언트 앱을 등록하는 방법에 대해 알아보려면 클라이언트 앱 등록을 참조하세요.

Power BI REST API 호출은 요청의 "인증" 헤더에 토큰을 전달하여 인증된 사용자를 대신하여 수행됩니다. 토큰은 Azure Active Directory를 통해 가져옵니다.

참고 Power BI 비공개 미리 보기의 경우, 앱은 Azure 관리 포털을 사용하는 다중 테넌트 앱으로 생성됩니다.

Power BI 클라이언트 앱을 인증하는 데 필요한 작업

Power BI 클라이언트 앱을 인증하고 REST 웹 요청을 수행하려면 다음 작업을 수행해야 합니다.

  1. 클라이언트 앱 등록 - Power BI 클라이언트 앱을 등록하려면 클라이언트 앱 등록을 참조하세요. Azure Active Directory에 클라이언트 앱을 등록하면 앱에 Power BI API에 대한 액세스 권한이 부여됩니다.
  2. 앱에 클라이언트 ID 할당 - 앱의 클라이언트 ID를 가져오려면 클라이언트 앱 ID를 가져오는 방법을 참조하세요. 클라이언트 ID는 응용 프로그램에서 사용자에게 권한을 요청하고 있음을 사용자가 알 수 있도록 하는 데 사용됩니다.
    • 클라이언트 앱 코드에서 Azure 응용 프로그램의 클라이언트 ID에 clientID 변수를 할당합니다.
  3. 리디렉션 URI 할당 - 클라이언트 앱의 경우 리디렉션 URI는 인증할 특정 응용 프로그램에 대한 세부 정보를 AAD에 제공합니다. URI(Uniform Resource Identifier)는 리소스 이름을 식별하는 값입니다.

    • 클라이언트 앱 코드에서 redirectUri 를 "https://login.live.com/oauth20_desktop.srf"에 할당합니다. 클라이언트 앱은 리디렉션할 수 있는 외부 서비스가 없으므로 이 URI가 클라이언트 앱의 표준 자리 표시자입니다.
  4. Power BI API에 대한 리소스 URI 할당 - 리소스 URI는 Power BI API 리소스를 식별합니다.

    • 클라이언트 앱 코드에서 resourceUri 를 "https://analysis.windows.net/powerbi/api"에 할당합니다.
  5. OAuth2 기관 URI 할당 - 기관 URI는 OAuth2 기관 리소스를 식별합니다.

    • 클라이언트 앱 코드에서 기관 URI를 "https://login.windows.net/common/oauth2/authorize"에 할당합니다.
  6. Power BI API 데이터 집합에 대한 데이터 집합 URI 할당 - 데이터 집합 URI는 Power BI API 리소스를 식별합니다.

    • 클라이언트 앱 코드에서 datasetsUri 를 "https://api.powerbi.com/v1.0/myorg/datasets"에 할당합니다.

Power BI REST 서비스에 대한 데이터 요청을 만들려면 액세스 토큰을 제공해야 합니다. .NET 클라이언트 앱에서 .NET nuget 패키지용 Azure AD 인증 라이브러리를 사용하여 액세스 토큰을 가져옵니다. 프로세스는 다음과 같습니다. 다음은 AccessToken() 메서드 예제입니다.

Microsoft Azure 인증 라이브러리(ADAL)가 없는 경우 Azure Active Directory 인증 라이브러리를 추가하는 방법을 참조하세요.

중요 클라이언트 앱을 인증하려면 Microsoft Azure 인증 라이브러리(ADAL)에 포함된 Microsoft.IdentityModel.Clients.ActiveDirectory에 대한 참조를 추가해야 합니다.

액세스 토큰을 가져오기 위한 단계

  1. AuthenticationContext의 인스턴스를 만듭니다. - AuthenticationContext는 Azure AD 리소스에 대한 토큰 발급 기관을 나타내는 주 클래스입니다. 생성자는 다음을 사용합니다.

    • OAuth2 authorityUri
            //OAuth2 authority Uri
            string authorityUri = "https://login.windows.net/common/oauth2/authorize";
    AuthenticationContext  authContext = new AuthenticationContext(authorityUri);
    
  2. AuthenticationContext.AcquireToken()을 호출하여 토큰을 가져옵니다. - 메서드는 다음을 사용합니다.

    • Power BI API resourceUri
    • Power BI 앱 clientID
    • Power BI 앱 redirectUri
    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;
      }

토큰을 사용하여 Power BI REST API에 대한 데이터 요청 만들기

Active Directory(AAD)에서 액세스 토큰을 가져온 후, 토큰을 사용하여 Power BI REST API에 웹 요청을 만듭니다. Power BI REST 웹 요청을 만들려면 다음과 같이 요청 헤더에 액세스 토큰을 추가합니다.

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

C# 예제 - 토큰을 사용하는 Power BI REST API 데이터 요청

Power BI 클라이언트 앱을 인증하고 모든 Power BI REST 작업을 호출하는 방법을 보여 주는 전체 C# 샘플을 보려면 클라이언트 앱 샘플 또는 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 인증 컨텍스트 흐름

.NET 클라이언트 앱에서는 AuthenticationContext 를 사용하여 Azure 액세스 토큰을 가져옵니다. 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. 클라이언트 응용 프로그램을 인증한 후 Power BI REST API는 요청한 데이터를 반환합니다.

Azure AD(Azure Active Directory) 권한 부여 흐름에 대해 알아보려면 인증 코드 부여 흐름을 참조하세요.

Azure Active Directory 인증 라이브러리를 추가하는 방법

.NET 클라이언트 앱에서는 Active Directory 인증 라이브러리AuthenticationContext 를 사용하여 Azure 액세스 토큰을 가져옵니다. Visual Studio에서 Active Directory 인증 라이브러리 NuGet 패키지를 설치할 수 있습니다. NuGet 패키지를 설치할 때 Visual Studio에서는 필요한 어셈블리에 대한 참조를 만듭니다.

  1. 솔루션을 마우스 오른쪽 단추로 클릭합니다.

  2. NuGet 패키지 관리를 선택합니다.

  3. Active Directory 인증 라이브러리를 검색합니다.

  4. 패키지 목록에서 Active Directory 인증 라이브러리 를 선택하고 설치를 클릭합니다.

참고 항목

.NET nuget 패키지용 Azure AD 인증 라이브러리
.NET용 ADAL(Active Directory 인증 라이브러리) v1
Azure AD의 OAuth 2.0
인증 코드 부여 흐름
Azure AD에 대한 인증 시나리오
궁금한 점이 더 있나요? Power BI 커뮤니티를 이용하세요.