次の方法で共有


アクセス トークンを更新する

Power BI コンテンツ (レポート、ダッシュボード、タイル) を埋め込んで操作するには、アクセス トークンが必要です。 アクセス トークンは、組織の埋め込み時に azure AD トークン、顧客向けに埋め込む場合は 埋め込みトークンのいずれかになります。 アクセス トークンには有効期限があります。つまり、Power BI 項目を埋め込んだ後、操作する時間は限られています。 ユーザーに継続的なエクスペリエンスを提供するには、有効期限が切れる前にアクセス トークンを更新 (または更新) します。

アクセス トークンを更新するには、次の 2 つの方法があります。

  • 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 からサポートされています。

アクセス トークンを自動的に更新するには、埋め込み時に IEmbedConfiguration のパラメーターとして accessTokenProvider 関数を設定します。 この関数は顧客によって実装され、呼び出されたときに新しいトークンを返します。 トークンの有効期限が近づくと、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 イベント フックは例外をスローしないでください。 新しいトークンの生成に失敗した場合は、Null 値を返します。

さまざまな埋め込みソリューションについて