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.

Comprendre les différentes solutions d’incorporation