액세스 토큰 가져오기

완료됨

앱에서 Power BI 콘텐츠를 포함하는 데 필요한 액세스 토큰을 획득하는 경우 Azure AD 토큰을 획득하게 됩니다. 고객용 시나리오를 사용하는 경우 앱은 Azure AD 토큰을 사용하여 embed 토큰을 생성합니다.

상황을 명확히 설명하면 다음과 같습니다.

  • 조직용 시나리오에 대한 액세스 토큰은 앱이 부여된 권한을 식별하는 데 사용하는 클레임을 포함하는 Azure AD 토큰입니다.
  • 고객용 시나리오에 대한 액세스 토큰은 Power BI 콘텐츠에 대한 팩트와 앱에서 액세스하는 방법을 나타내는 embed 토큰입니다. 앱은 Azure AD 토큰이 필요한 Power BI REST API 작업을 사용하여 embed 토큰을 생성합니다.

Azure AD 토큰 획득

MSAL(Microsoft 인증 라이브러리)을 사용하여 Microsoft ID 플랫폼에서 Azure AD 토큰을 획득하는 앱 논리를 개발합니다. MSAL은 .NET, JavaScript, Java, Python, Android 및 iOS를 비롯한 다양한 애플리케이션 아키텍처 및 플랫폼을 지원합니다.

ASP.NET Core 웹앱을 개발할 때 Microsoft ID 웹 인증 라이브러리를 사용하는 것이 좋습니다. 이 라이브러리는 Microsoft.Identity.Web이라는 패키지 집합입니다. NuGet 또는 Visual Studio에서 설치할 수 있습니다.

MSAL을 사용하여 Azure AD 토큰을 획득하는 다양한 기술이 있습니다. 일부 경우에는 웹 브라우저를 통한 사용자 조작이 필요하지만 다른 경우에는 사용자 조작이 필요하지 않습니다. 일반적으로 Azure AD 토큰을 획득하기 위해 선택하는 방법은 애플리케이션이 데스크톱 또는 모바일 앱과 같은 퍼블릭 클라이언트 애플리케이션인지, 아니면 웹앱과 같은 기밀 클라이언트 애플리케이션인지에 따라 달라집니다. 포함 시나리오도 선택에 영향을 줍니다.

이 단원에서는 Azure AD 토큰을 획득하는 기술을 설명하지는 않습니다. 자세한 내용은 MSAL(Microsoft 인증 라이브러리)을 사용하여 토큰 획득 및 캐싱을 참조하세요.

포함 설정 도구 샘플 앱이 앱 요구 사항과 일치하는 경우 샘플 코드를 복사하여 Azure AD 토큰을 획득하는 것이 좋습니다.

앱이 Azure AD 토큰을 획득할 수 있도록 하려면 해당 구성 파일에 다음 설정이 포함되어야 합니다.

  • TenantId - 서비스 주체에만 필요합니다. Azure AD TenantID입니다.
  • ClientId - 필수입니다. Azure AD 앱 ApplicationID(ClientID)입니다.
  • ClientSecret 또는 ClientCertificate - 서비스 주체에만 필요합니다.
  • PbiUsername - 마스터 사용자 계정에만 필요합니다.
  • PbiPassword - 마스터 사용자 계정에만 필요합니다.

중요

인증서, 클라이언트 암호 또는 마스터 사용자 계정 자격 증명 중 어느 것을 사용하든, 무단 액세스 및 사용으로부터 보호하는 단계를 수행해야 합니다. 클라우드에서 암호화 키, 인증서 및 암호를 보호하는 Azure Key Vault를 사용하는 것이 좋습니다.

embed 토큰 획득

Microsoft Power BI REST APIGenerateTokenRequestV2 작업을 사용하여 embed 토큰을 요청합니다. 다른 Power BI 콘텐츠 형식에 대한 embed 토큰을 생성하는 다른 관련 작업이 있습니다. 모든 API 작업에는 Azure AD 토큰이 필요합니다.

.NET 앱을 개발할 때 Microsoft.PowerBI.Api 패키지를 설치하는 것이 좋습니다. NuGet 또는 Visual Studio에서 설치할 수 있습니다.

embed 토큰을 생성하는 방법을 보여 주는 다음 코드를 고려합니다. 토큰에는 작업 영역의 모든 보고서 및 데이터 세트에 대한 클레임이 포함되며 앱 사용자가 보고서를 만들거나 편집할 수 있도록 합니다. 특히 다음 작업을 수행합니다.

  1. Power BI에 연결합니다.
  2. reportTokenRequests라는 변수를 선언하여 보고서 토큰 요청을 저장합니다.
  3. 작업 영역의 모든 보고서를 열거하여 EmbeddedReport 개체 목록을 만듭니다(도우미 클래스 사용). 각 개체는 보고서의 ID, 이름 및 포함 URL을 설명합니다. 앱에서 토큰을 생성하려면 보고서의 ID가 필요합니다. 메뉴의 사용자에게 표시하려면 이름이 필요합니다. 보고서를 포함하려면 포함 URL이 필요합니다. 이 코드는 보고서 편집을 허용하는 보고서 토큰 요청을 reportTokenRequests 변수에 추가합니다.
  4. datasetTokenRequests라는 변수를 선언하여 보고서 토큰 요청을 저장합니다.
  5. 작업 영역의 모든 데이터 세트를 열거하여 EmbeddedDataset 개체 목록을 만듭니다(도우미 클래스 사용). 각 개체는 데이터 세트의 ID, 이름 및 포함 URL을 설명합니다. 토큰을 생성하려면 앱에 데이터 세트의 ID가 필요합니다. 메뉴의 사용자에게 표시하려면 이름이 필요할 수도 있습니다. 데이터 세트를 포함하려면 포함 URL이 필요합니다. 이 코드는 datasetTokenRequests 변수에 데이터 세트 토큰 요청을 추가합니다.
  6. workspaceRequests 변수에 추가된 작업 영역 토큰 요청(사용자가 보고서를 만들 때 필요)을 생성합니다.
  7. GenerateTokenRequestV2 메서드를 사용하여 보고서 토큰 요청, 데이터 세트 토큰 요청 및 작업 영역 토큰 요청을 함께 번들로 묶습니다.
  8. GenerateTokenAsync를 사용하여 embed 토큰을 생성합니다.
  9. embed 토큰을 문자열 변수에 저장합니다.
// Connect to Power BI
var client = GetPowerBiClient();

// Get reports in the workspace
var reports = (await client.Reports.GetReportsInGroupAsync(_workspaceId)).Value;

var reportList = new List<EmbeddedReport>();
var reportTokenRequests = new List<GenerateTokenRequestV2Report>();

foreach (var report in reports)
{
    reportList.Add(new EmbeddedReport
    {
        Id = report.Id.ToString(),
        Name = report.Name,
        EmbedUrl = report.EmbedUrl
    });

    reportTokenRequests.Add(new GenerateTokenRequestV2Report(report.Id, allowEdit: true));
}

// Get datasets in the workspace
var datasets = (await client.Datasets.GetDatasetsInGroupAsync(_workspaceId)).Value;

var datasetList = new List<EmbeddedDataset>();
var datasetTokenRequests = new List<GenerateTokenRequestV2Dataset>();

foreach (var dataset in datasets)
{
    datasetList.Add(new EmbeddedDataset
    {
        Id = dataset.Id.ToString(),
        Name = dataset.Name,
        EmbedUrl = dataset.QnaEmbedURL
    });

    datasetTokenRequests.Add(new GenerateTokenRequestV2Dataset(dataset.Id));
}

// Generate token request for the workspace
var workspaceRequests = new GenerateTokenRequestV2TargetWorkspace[] {
    new GenerateTokenRequestV2TargetWorkspace(_workspaceId)
};

// Bundle token requests for reports, datasets, and the workspace
var tokenRequest = new GenerateTokenRequestV2(
    reports: reportTokenRequests,
    datasets: datasetTokenRequests,
    targetWorkspaces: workspaceRequests
);

// Generate the embed token
string embedToken = (await client.EmbedToken.GenerateTokenAsync(tokenRequest)).Token;

앱은 embedToken 변수 값을 포함 HTML 페이지로 출력해야 합니다. 그런 다음, 클라이언트 쪽 논리는 embed 토큰을 사용하여 div 요소에 콘텐츠를 포함할 수 있습니다.

참고

Power BI 콘텐츠를 포함하는 방법을 알아보려면 Power BI 콘텐츠 포함 모듈을 참조하세요.

앱이 embed 토큰을 획득할 수 있도록 하려면 해당 구성 파일에 포함 가능한 콘텐츠에 대한 세부 정보가 포함되어야 합니다. 특정 ReportID 및 DatasetID를 포함하거나, 좀 더 일반적으로는 포함 가능한 콘텐츠를 포함하는 작업 영역의 GroupID를 포함할 수 있습니다.

자세한 내용은 embed 토큰 - 토큰 생성을 참조하세요.

액세스 토큰 새로 고침

액세스 토큰에는 만료 시간이 있습니다. 앱 사용자가 생성되면 앱 사용자는 이를 사용하는 Power BI 콘텐츠와 상호 작용하는 시간이 제한됩니다. 앱 사용자에게 지속적인 환경을 제공하기 위해 앱은 Power BI 클라이언트 API를 사용하여 만료되기 전에 액세스 토큰을 새로 고쳐야 합니다.

참고

클라이언트 API에 대해 알아보려면 Power BI 클라이언트 API와 콘텐츠 통합 모듈을 진행하세요.

자세한 내용은 액세스 토큰 새로 고침을 참조하세요.

다른 리소스 살펴보기

자세한 내용은 Azure AD 보안에 대한 Power BI 개발자 가이드라는 비디오 시리즈를 시청하세요. 이 시리즈는 심층 이론을 다루는 여섯 개의 동영상으로 구성됩니다. Microsoft의 Power BI CAT(고객 자문 팀)의 일원인 Ted Pattison은 이 동영상 시리즈를 제작했습니다.