Condividi tramite


Aggiornare il token di accesso

L'incorporamento e l'interazione con il contenuto di Power BI (report, dashboard e riquadri) richiede un token di accesso. Il token di accesso può essere un token di Azure AD , durante l'incorporamento per l'organizzazione o un token di incorporamento , durante l'incorporamento per i clienti. Il token di accesso ha una scadenza, il che significa che dopo l'incorporamento di un elemento di Power BI è disponibile un periodo di tempo limitato per interagire con esso. Per offrire agli utenti un'esperienza continua, aggiornare (o rinnovare) il token di accesso prima della scadenza.

Esistono due modi per aggiornare il token di accesso:

  • direttamente usando l'API di setAccessToken
  • automaticamente se si usa un token di Azure AD per incorporare per l'organizzazione

Aggiornare direttamente il token di accesso

setAccessToken può essere usato per aggiornare il token di accesso senza ricaricare il report incorporato. Usarlo quando il token sta per scadere.

await report.setAccessToken(newAccessToken);

Esempio di aggiornamento manuale dei token

Per aggiornare manualmente il token di accesso, implementare getNewUserAccessToken(). Questa funzione chiama il back-end dell'applicazione per generare un nuovo token di incorporamento o aggiorna il token di Azure AD.

Di seguito è riportato un esempio di come implementare manualmente la funzione getNewUserAccessToken() per aggiornare il token di accesso prima della scadenza.

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)
    }​​​​
}​​​​);

Aggiornare automaticamente il token

Se si usa un token di Azure AD per lo scenario di incorporamento per l'organizzazione, è possibile aggiornare automaticamente il token di accesso impostando un hook eventi nei parametri di configurazione di incorporamento. L'hook eventi chiamerà una funzione che genera nuovi token e assegnerà il token generato all'elemento incorporato prima della scadenza del token corrente. È sufficiente fornire la funzione di generazione del token e il resto avviene automaticamente.

Nota

L'aggiornamento automatico del token di accesso è supportato dalla libreria JavaScript powerbi-client versione 2.20.1.

Per aggiornare automaticamente il token di accesso, impostare la funzione accessTokenProvider come parametro in IEmbedConfiguration durante l'incorporamento. Questa funzione viene implementata dal cliente e restituisce un nuovo token quando viene chiamato. Quando il token è vicino alla scadenza, l'iframe chiamerà l'hook accesTokenProvider per acquisire un nuovo token dall'app host e quindi impostare il nuovo token.

Esempio di token di aggiornamento automatico

Di seguito è riportato un esempio di come aggiornare automaticamente il token di accesso prima della scadenza.

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);

Considerazioni e limitazioni

  • L'aggiornamento automatico del token di accesso è supportato solo per lo scenario di incorporamento per l'organizzazione (dati di proprietà dell'utente).
  • L'hook eventi accessTokenProvider non deve mai generare un'eccezione. Se non riesce a generare un nuovo token, restituire un valore Null.

Informazioni sulle diverse soluzioni di incorporamento