Share via


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 :

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.

Étapes suivantes

Comprendre les différentes solutions d’incorporation