Aktualisieren des Zugriffstokens

Für das Einbetten und Interagieren mit Power BI-Inhalten (Berichte, Dashboards und Kacheln) ist ein Zugriffstoken erforderlich. Das Zugriffstoken kann entweder ein Azure AD-Token bei der Einbettung für Ihre organization oder ein Einbettungstoken beim Einbetten für Ihre Kunden sein. Das Zugriffstoken hat eine Ablaufzeit, was bedeutet, dass Sie nach dem Einbetten eines Power BI-Elements eine begrenzte Zeit für die Interaktion mit dem Element haben. Um Ihren Benutzern eine kontinuierliche Benutzeroberfläche zu bieten, aktualisieren (oder erneuern) Sie das Zugriffstoken, bevor es abläuft.

Es gibt zwei Möglichkeiten, Ihr Zugriffstoken zu aktualisieren:

  • Direkte Verwendung der setAccessToken API
  • Automatisch, wenn Sie ein Azure AD-Token zum Einbetten für Ihre organization

Direktes Aktualisieren des Zugriffstokens

setAccessToken kann verwendet werden, um das Zugriffstoken zu aktualisieren, ohne den eingebetteten Bericht neu zu laden. Verwenden Sie es, wenn das Token abläuft.

await report.setAccessToken(newAccessToken);

Beispiel für manuelle Tokenaktualisierung

Um Ihr Zugriffstoken manuell zu aktualisieren, implementieren Sie getNewUserAccessToken(). Diese Funktion ruft Ihr Anwendungs-Back-End auf, um ein neues Einbettungstoken zu generieren, oder aktualisiert das Azure AD-Token.

Im Folgenden finden Sie ein Beispiel für die manuelle Implementierung der getNewUserAccessToken()-Funktion, um Ihr Zugriffstoken zu aktualisieren, bevor es abläuft.

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

Token automatisch aktualisieren

Wenn Sie ein Azure AD-Token für die Einbettung für Ihr organization-Szenario verwenden, können Sie das Zugriffstoken automatisch aktualisieren, indem Sie einen Ereignishaken in Ihren Einbettungskonfigurationsparametern festlegen. Der Ereignishaken ruft eine Funktion auf, die neue Token generiert, und weist das generierte Token dem eingebetteten Element zu, bevor das aktuelle Token abläuft. Sie müssen lediglich die Tokengenerierungsfunktion bereitstellen, und der Rest erfolgt automatisch.

Hinweis

Das automatische Aktualisieren des Zugriffstokens wird von powerbi-client JavaScript-Bibliothek Version 2.20.1 unterstützt.

Um das Zugriffstoken automatisch zu aktualisieren, legen Sie die accessTokenProvider Funktion beim Einbetten als Parameter in IEmbedConfiguration fest. Diese Funktion wird vom Kunden implementiert und gibt beim Aufruf ein neues Token zurück. Wenn das Token kurz vor dem Ablauf steht, ruft der iframe den accesTokenProvider Hook auf, um ein neues Token von der Hosting-App abzurufen, und legt dann das neue Token fest.

Beispiel für automatisches Aktualisieren des Tokens

Im Folgenden finden Sie ein Beispiel dafür, wie Sie Ihr Zugriffstoken automatisch aktualisieren, bevor es abläuft.

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

Überlegungen und Einschränkungen

  • Das automatische Aktualisieren des Zugriffstokens wird nur für das Szenario "Einbettung" für Ihre organization (benutzereigene Daten) unterstützt.
  • Der accessTokenProvider Ereignishaken sollte niemals eine Ausnahme auslösen. Wenn ein neues Token nicht generiert werden kann, geben Sie einen Null-Wert zurück.

Nächste Schritte

Grundlegendes zu den verschiedenen Einbettungslösungen