Merefresh token akses

Menyematkan dan berinteraksi dengan konten Power BI (laporan, dasbor, dan petak peta) memerlukan token akses. Token akses dapat berupa token Azure AD, saat menyematkan untuk organisasi Anda, atau token semat, saat menyematkan untuk pelanggan Anda. Token akses memiliki waktu kedaluwarsa, yang berarti bahwa setelah menyematkan item Power BI, Anda memiliki waktu terbatas untuk berinteraksi dengannya. Untuk memberi pengguna Anda pengalaman berkelanjutan, refresh (atau perbarui) token akses sebelum kedaluwarsa.

Ada dua cara untuk merefresh token akses Anda:

  • Langsung menggunakan setAccessToken API
  • Secara otomatis jika Anda menggunakan token Azure AD untuk disematkan untuk organisasi Anda

Merefresh token akses secara langsung

setAccessToken dapat digunakan untuk memperbarui token akses tanpa memuat ulang laporan yang disematkan. Gunakan saat token akan kedaluwarsa.

await report.setAccessToken(newAccessToken);

Contoh refresh token manual

Untuk merefresh token akses Anda secara manual, terapkan getNewUserAccessToken(). Fungsi ini memanggil backend aplikasi Anda untuk menghasilkan token semat baru, atau menyegarkan token Azure AD.

Di bawah ini adalah contoh cara mengimplementasikan fungsi getNewUserAccessToken() secara manual untuk me-refresh token akses Anda sebelum kedaluwarsa.

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)
    }​​​​
}​​​​);

Merefresh token secara otomatis

Jika Anda menggunakan token Azure AD untuk sematan untuk skenario organisasi, Anda dapat merefresh token akses secara otomatis dengan mengatur hook peristiwa di parameter konfigurasi penyematan Anda. Hook peristiwa akan memanggil fungsi yang menghasilkan token baru dan menetapkan token yang dihasilkan ke item yang disematkan sebelum token saat ini kedaluwarsa. Yang perlu Anda lakukan adalah menyediakan fungsi pembuatan token, dan sisanya terjadi secara otomatis.

Catatan

Menyegarkan token akses secara otomatis didukung dari pustaka JavaScript klien powerbi versi 2.20.1.

Untuk merefresh token akses secara otomatis, atur accessTokenProvider fungsi sebagai parameter saat IEmbedConfiguration menyematkan. Fungsi ini diimplementasikan oleh pelanggan dan mengembalikan token baru saat dipanggil. Ketika token hampir kedaluwarsa, iframe akan memanggil accesTokenProvider kait untuk memperoleh token baru dari aplikasi hosting, lalu mengatur token baru.

Contoh token refresh secara otomatis

Di bawah ini adalah contoh cara merefresh token akses Anda secara otomatis sebelum kedaluwarsa.

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);

Pertimbangan dan batasan

  • Merefresh token akses secara otomatis hanya didukung untuk sematan untuk skenario organisasi Anda (pengguna memiliki data).
  • Hook accessTokenProvider peristiwa tidak boleh melemparkan pengecualian. Jika gagal menghasilkan token baru, kembalikan nilai Null.

Langkah berikutnya

Memahami solusi penyematan yang berbeda