Bagikan melalui


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 disematkan, 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 me-refresh token akses Anda:

  • Langsung menggunakan API setAccessToken
  • 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 merefresh token Microsoft Azure AD.

Di bawah ini adalah contoh cara menerapkan 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 ACTIVE Directory untuk yang disematkan untuk skenario organisasi, Anda dapat me-refresh token akses secara otomatis dengan mengatur kait peristiwa di parameter konfigurasi penyematan Anda. Kait 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.

Nota

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

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

Contoh token refresh secara otomatis

Di bawah ini adalah contoh cara me-refresh 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

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

Memahami berbagai solusi penyematan