다음을 통해 공유


액세스 토큰 새로 고침

Power BI 콘텐츠(보고서, 대시보드 및 타일)를 포함하고 상호 작용하려면 액세스 토큰이 필요합니다. 액세스 토큰은 Azure AD 토큰, 조직에 포함할 때 또는 고객을 위해 포함할 때 포함 토큰수 있습니다. 액세스 토큰에는 만료 시간이 있습니다. 즉, Power BI 항목을 포함하면 상호 작용할 시간이 제한됩니다. 사용자에게 지속적인 환경을 제공하려면 만료되기 전에 액세스 토큰을 새로 고치거나 갱신합니다.

액세스 토큰을 새로 고치는 방법에는 두 가지가 있습니다.

  • API를 사용하여 직접
  • 조직의 포함에 Azure AD 토큰을 사용하는 경우 자동으로

액세스 토큰을 직접 새로 고칩니다.

setAccessToken 포함된 보고서를 다시 로드하지 않고 액세스 토큰을 업데이트하는 데 사용할 수 있습니다. 토큰이 만료되려고 할 때 사용합니다.

await report.setAccessToken(newAccessToken);

수동 토큰 새로 고침 예제

액세스 토큰을 수동으로 새로 고치려면 getNewUserAccessToken()을 구현합니다. 이 함수는 애플리케이션 백 엔드를 호출하여 새 포함 토큰을 생성하거나 Azure AD 토큰을 새로 고칩니다.

다음은 getNewUserAccessToken() 함수를 수동으로 구현하여 만료되기 전에 액세스 토큰을 새로 고치는 방법의 예입니다.

const MINUTES_BEFORE_EXPIRATION = 10;

// Set the refresh interval time to 30 seconds
const INTERVAL_TIME = 30000;

// Get the token expiration from the access token
var tokenExpiration;

// Set an interval to check the access token expiration, and update if needed
setInterval(() => checkTokenAndUpdate(reportId, groupId), INTERVAL_TIME);

function checkTokenAndUpdate(reportId, groupId) {
    // Get the current time
    const currentTime = Date.now();
    const expiration = Date.parse(tokenExpiration);

    // Time until token expiration in milliseconds
    const timeUntilExpiration = expiration - currentTime;
    const timeToUpdate = MINUTES_BEFORE_EXPIRATION * 60 * 1000;

    // Update the token if it is about to expired
    if (timeUntilExpiration <= timeToUpdate)
    {
        console.log("Updating report access token");
        updateToken(reportId, groupId);
    }
}

async function updateToken(reportId, groupId) {
    // Generate a new embed token or refresh the user Azure AD access token
    let newAccessToken = await getNewUserAccessToken(reportId, groupId);

    // Update the new token expiration time
    tokenExpiration = newAccessToken.expiration;

    // Get a reference to the embedded report HTML element
    let embedContainer = $('#embedContainer')[0];

    // Get a reference to the embedded report.
    let report = powerbi.get(embedContainer);

    // Set the new access token
    await report.setAccessToken(newAccessToken.token);
}

// Add a listener to make sure token is updated after tab was inactive
document.addEventListener("visibilitychange", function() {​​​​
    // Check the access token when the tab is visible
    if (!document.hidden) {​​​​
        checkTokenAndUpdate(reportId, groupId)
    }​​​​
}​​​​);

토큰 자동 새로 고침

조직 시나리오에 포함된 Azure AD 토큰을 사용하는 경우 포함 구성 매개 변수에 이벤트 후크를 설정하여 액세스 토큰을 자동으로 새로 고칠 수 있습니다. 이벤트 후크는 새 토큰을 생성하는 함수를 호출하고 현재 토큰이 만료되기 전에 생성된 토큰을 포함된 항목에 할당합니다. 토큰 생성 함수를 제공하기만 하면 나머지는 자동으로 수행됩니다.

메모

액세스 토큰을 자동으로 새로 고치는 기능은 powerbi-client JavaScript 라이브러리 버전 2.20.1에서 지원됩니다.

액세스 토큰을 자동으로 새로 고치려면 포함할 때 IEmbedConfigurationaccessTokenProvider 함수를 매개 변수로 설정합니다. 이 함수는 고객이 구현하고 호출될 때 새 토큰을 반환합니다. 토큰이 만료에 가까워지면 iframe은 accesTokenProvider 후크를 호출하여 호스팅 앱에서 새 토큰을 획득한 다음 새 토큰을 설정합니다.

토큰 자동 새로 고침 예제

다음은 만료되기 전에 액세스 토큰을 자동으로 새로 고치는 방법의 예입니다.

let getNewAccessToken = async function () {
        // Code you need to add for generating new Azure AD token
        return token;
    };

let config = {
        type: 'report',
        tokenType: models.TokenType.Aad,
        accessToken: “eyJ0 …”,
        embedUrl: “https: …”,
        eventHooks: {
            accessTokenProvider: getNewAccessToken
        }
    };

// Get a reference to the embedded report HTML element
let embedContainer = $('#embedContainer')[0];

// Embed the report and display it within the div container.
report = powerbi.embed(embedContainer, config);

고려 사항 및 제한 사항

  • 액세스 토큰을 자동으로 새로 고치는 것은 조직(사용자 소유 데이터) 시나리오에 대한 포함에 대해서만 지원됩니다.
  • accessTokenProvider 이벤트 후크는 예외를 throw해서는 안 됩니다. 새 토큰을 생성하지 못하면 Null 값을 반환합니다.

다양한 포함 솔루션 이해