Aktualisieren des Zugriffstokens
Das Einbetten und Interagieren mit Power BI-Inhalten (Berichte, Dashboards und Kacheln) erfordert ein Zugriffstoken. Das Zugriffstoken kann entweder ein Azure AD-Tokensein, wenn sie für Ihre Organisation eingebettet werden, oder ein Einbettungstoken, wenn Sie es für Ihre Kunden einbetten. Das Zugriffstoken verfügt über eine Ablaufzeit, was bedeutet, dass Sie nach dem Einbetten eines Power BI-Elements eine begrenzte Zeit haben, mit der Sie interagieren können. Um Ihren Benutzern eine kontinuierliche Benutzererfahrung zu ermöglichen, aktualisieren (oder erneuern) Sie das Zugriffstoken, bevor es abläuft.
Es gibt zwei Möglichkeiten zum Aktualisieren Ihres Zugriffstokens:
-
direkt mithilfe der
setAccessToken
-API - automatisch, wenn Sie ein Azure AD-Token für Einbettung für Ihre Organisation
Aktualisieren des Zugriffstokens direkt
setAccessToken
können verwendet werden, um das Zugriffstoken zu aktualisieren, ohne den eingebetteten Bericht neu zu laden.
Verwenden Sie es, wenn das Token bald abläuft.
await report.setAccessToken(newAccessToken);
Beispiel für die 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 das Azure AD-Token zu aktualisieren.
Nachfolgend 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 Unternehmen Szenario verwenden, können Sie das Zugriffstoken automatisch aktualisieren, indem Sie einen Ereignishaken in Ihre Einbettungskonfigurationsparameter festlegen. Der Ereignishaken ruft eine Funktion auf, die neue Token generiert und dem eingebetteten Element das generierte Token zuweist, bevor das aktuelle Token abläuft. Alles, was Sie tun müssen, ist die Tokengenerierungsfunktion, und der Rest erfolgt automatisch.
Anmerkung
Das automatische Aktualisieren des Zugriffstokens wird von der Powerbi-Client-JavaScript-Bibliothek, Version 2.20.1, unterstützt.
Um das Zugriffstoken automatisch zu aktualisieren, legen Sie beim Einbetten die accessTokenProvider
Funktion als Parameter in IEmbedConfiguration
fest. Diese Funktion wird vom Kunden implementiert und gibt ein neues Token zurück, wenn sie aufgerufen wird.
Wenn das Token bald abläuft, ruft der iframe den accesTokenProvider
Hook auf, um ein neues Token aus der Hosting-App abzurufen und dann das neue Token festzulegen.
Beispiel für automatische Aktualisierungstoken
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 Organisation (Benutzer besitzt Daten) unterstützt.
- Der
accessTokenProvider
-Ereignishaken sollte niemals eine Ausnahme auslösen. Wenn ein neues Token nicht generiert werden kann, wird ein Nullwert zurückgegeben.