Odświeżanie tokenu dostępu
Osadzanie i interakcja z zawartością usługi Power BI (raportami, pulpitami nawigacyjnymi i kafelkami) wymaga tokenu dostępu. Token dostępu może być tokenem usługi Azure ADpodczas osadzania dla organizacji lub tokenem osadzania podczas osadzania dla klientów. Token dostępu ma czas wygaśnięcia, co oznacza, że po osadzeniu elementu usługi Power BI masz ograniczony czas na interakcję z nim. Aby zapewnić użytkownikom ciągłe środowisko, odśwież (lub odnów) token dostępu przed jego wygaśnięciem.
Istnieją dwa sposoby odświeżania tokenu dostępu:
-
bezpośrednio przy użyciu interfejsu API
setAccessToken
- automatycznie, jeśli używasz tokenu usługi Azure AD na potrzeby osadzania dla organizacji
Odświeżanie tokenu dostępu bezpośrednio
setAccessToken
można użyć do zaktualizowania tokenu dostępu bez ponownego ładowania osadzonego raportu.
Użyj go, gdy token wygaśnie.
await report.setAccessToken(newAccessToken);
Przykład ręcznego odświeżania tokenu
Aby ręcznie odświeżyć token dostępu, zaimplementuj metodę getNewUserAccessToken(). Ta funkcja wywołuje zaplecze aplikacji w celu wygenerowania nowego tokenu osadzania lub odświeżenia tokenu usługi Azure AD.
Poniżej przedstawiono przykład ręcznego zaimplementowania funkcji getNewUserAccessToken() w celu odświeżenia tokenu dostępu przed jego wygaśnięciem.
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)
}
});
Automatyczne odświeżanie tokenu
Jeśli używasz tokenu usługi Azure AD dla scenariusza osadzania dla organizacji scenariusza, możesz automatycznie odświeżyć token dostępu, ustawiając punkt zaczepienia zdarzeń w parametrach konfiguracji osadzania. Punkt zaczepienia zdarzeń wywoła funkcję, która generuje nowe tokeny i przypisze wygenerowany token do elementu osadzonego przed wygaśnięciem bieżącego tokenu. Wystarczy podać funkcję generowania tokenu, a reszta odbywa się automatycznie.
Nuta
Automatyczne odświeżanie tokenu dostępu jest obsługiwane z poziomu biblioteki JavaScript klienta powerbi w wersji 2.20.1.
Aby automatycznie odświeżyć token dostępu, ustaw funkcję accessTokenProvider
jako parametr w IEmbedConfiguration
podczas osadzania. Ta funkcja jest implementowana przez klienta i zwraca nowy token po wywołaniu.
Gdy token jest bliski wygaśnięcia, element iframe wywoła element accesTokenProvider
hook w celu uzyskania nowego tokenu z aplikacji hostingu, a następnie ustawi nowy token.
Przykład automatycznego odświeżania tokenu
Poniżej przedstawiono przykład automatycznego odświeżania tokenu dostępu przed jego wygaśnięciem.
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);
Zagadnienia i ograniczenia
- Automatyczne odświeżanie tokenu dostępu jest obsługiwane tylko w przypadku scenariusza osadzania dla organizacji (użytkownik jest właścicielem danych).
- Hak zdarzeń
accessTokenProvider
nigdy nie powinien zgłaszać wyjątku. Jeśli nie uda się wygenerować nowego tokenu, zwróć wartość null.