Actualiser le jeton d’accès
L’incorporation et l’interaction avec le contenu Power BI (rapports, tableaux de bord et vignettes) nécessite un jeton d’accès. Le jeton d’accès peut être un jeton Azure AD, lors de l’incorporation pour votre organisation ou d’un jeton incorporé , lors de l’incorporation pour vos clients. Le jeton d’accès a un délai d’expiration, ce qui signifie qu’après l’incorporation d’un élément Power BI, vous disposez d’un temps limité pour interagir avec celui-ci. Pour donner à vos utilisateurs une expérience continue, actualisez (ou renouvelez) le jeton d’accès avant son expiration.
Il existe deux façons d’actualiser votre jeton d’accès :
-
directement à l’aide de l’API
setAccessToken
- automatiquement si vous utilisez un jeton Azure AD pour incorporer pour votre organisation
Actualiser le jeton d’accès directement
setAccessToken
pouvez être utilisé pour mettre à jour le jeton d’accès sans recharger le rapport incorporé.
Utilisez-le lorsque le jeton expire.
await report.setAccessToken(newAccessToken);
Exemple d’actualisation manuelle des jetons
Pour actualiser manuellement votre jeton d’accès, implémentez getNewUserAccessToken(). Cette fonction appelle votre back-end d’application pour générer un nouveau jeton incorporé ou actualise le jeton Azure AD.
Vous trouverez ci-dessous un exemple d’implémentation manuelle de la fonction getNewUserAccessToken() pour actualiser votre jeton d’accès avant son expiration.
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)
}
});
Actualiser automatiquement le jeton
Si vous utilisez un jeton Azure AD pour l’incorporation pour votre organisation scénario, vous pouvez actualiser le jeton d’accès automatiquement en définissant un hook d’événement dans vos paramètres de configuration d’incorporation. Le hook d’événement appelle une fonction qui génère de nouveaux jetons et affecte le jeton généré à l’élément incorporé avant l’expiration du jeton actuel. Tout ce que vous devez faire est de fournir la fonction de génération de jetons, et le reste se produit automatiquement.
Note
L’actualisation automatique du jeton d’accès est prise en charge à partir de la bibliothèque JavaScript powerbi-client version 2.20.1.
Pour actualiser automatiquement le jeton d’accès, définissez la fonction accessTokenProvider
en tant que paramètre dans IEmbedConfiguration
lors de l’incorporation. Cette fonction est implémentée par le client et retourne un nouveau jeton lorsqu’il est appelé.
Lorsque le jeton est proche de l’expiration, l’iframe appelle le hook accesTokenProvider
pour acquérir un nouveau jeton à partir de l’application d’hébergement, puis définit le nouveau jeton.
Exemple de jeton d’actualisation automatique
Vous trouverez ci-dessous un exemple montrant comment actualiser automatiquement votre jeton d’accès avant son expiration.
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);
Considérations et limitations
- L’actualisation automatique du jeton d’accès est prise en charge uniquement pour l’incorporation pour votre organisation (l’utilisateur possède des données).
- Le hook d’événement
accessTokenProvider
ne doit jamais lever d’exception. S’il ne parvient pas à générer un nouveau jeton, retournez une valeur Null.