Actualiser le jeton d’accès
L’incorporation et l’interaction avec du contenu Power BI (rapports, tableaux de bord et vignettes) nécessitent un jeton d’accès. Le jeton d’accès peut être un jeton Azure AD, lors de l’incorporation pour votre organization, ou 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 avoir incorporé un élément Power BI, vous disposez d’un temps limité pour interagir avec celui-ci. Pour offrir une expérience continue à vos utilisateurs, actualisez (ou renouvelez) le jeton d’accès avant son expiration.
Il existe deux façons d’actualiser votre jeton d’accès :
- Utilisation directe de l’API
setAccessToken
- Automatiquement si vous utilisez un jeton Azure AD pour incorporer votre organization
Actualiser le jeton d’accès directement
setAccessToken
peut être utilisé pour mettre à jour le jeton d’accès sans recharger le rapport incorporé.
Utilisez-le lorsque le jeton est sur le point d’expirer.
await report.setAccessToken(newAccessToken);
Exemple d’actualisation de jeton manuelle
Pour actualiser votre jeton d’accès manuellement, 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.
Voici 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 de votre scénario de organization, vous pouvez actualiser automatiquement le jeton d’accès 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. Il vous suffit de fournir la fonction de génération de jetons, et le reste se produit automatiquement.
Notes
L’actualisation automatique du jeton d’accès est prise en charge à partir de la bibliothèque JavaScript powerbi-cliente version 2.20.1.
Pour actualiser automatiquement le jeton d’accès, définissez la accessTokenProvider
fonction 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 sur le point d’expirer, l’iframe appelle le accesTokenProvider
hook pour acquérir un nouveau jeton de l’application d’hébergement, puis définit le nouveau jeton.
Exemple de jeton d’actualisation automatique
Voici un exemple d’actualisation automatique de 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);
Observations et limitations
- L’actualisation automatique du jeton d’accès est uniquement prise en charge pour le scénario d’incorporation de votre organization (l’utilisateur possède des données).
- Le
accessTokenProvider
hook d’événement ne doit jamais lever d’exception. S’il ne parvient pas à générer un nouveau jeton, retournez une valeur Null.