Sdílet prostřednictvím


Aktualizace přístupového tokenu

Vkládání a interakce s obsahem Power BI (sestavy, řídicí panely a dlaždice) vyžaduje přístupový token. Přístupový token může být tokenu Azure AD, při vkládání pro vaši organizaci nebo token pro vloženípři vkládání pro vaše zákazníky. Přístupový token má dobu vypršení platnosti, což znamená, že po vložení položky Power BI máte omezenou dobu, po kterou s ní můžete pracovat. Pokud chcete uživatelům poskytnout nepřetržité prostředí, aktualizujte (nebo obnovte) přístupový token před vypršením jeho platnosti.

Přístupový token můžete aktualizovat dvěma způsoby:

  • přímo pomocí rozhraní API setAccessToken
  • automaticky, pokud používáte token Azure AD pro vložení pro vaší organizace

Přímý aktualizace přístupového tokenu

setAccessToken lze použít k aktualizaci přístupového tokenu bez opětovného načtení vložené sestavy. Použijte ho, když platnost tokenu vyprší.

await report.setAccessToken(newAccessToken);

Příklad ruční aktualizace tokenu

Pokud chcete přístupový token aktualizovat ručně, implementujte getNewUserAccessToken(). Tato funkce volá back-end vaší aplikace, aby vygeneroval nový token pro vložení nebo aktualizoval token Azure AD.

Níže je příklad ruční implementace funkce getNewUserAccessToken() pro aktualizaci přístupového tokenu před vypršením jeho platnosti.

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

Automatická aktualizace tokenu

Pokud používáte token Azure AD pro vložení pro vaši organizaci scénář, můžete přístupový token aktualizovat automaticky nastavením háku události v parametrech konfigurace pro vložení. Hook události zavolá funkci, která vygeneruje nové tokeny a před vypršením platnosti aktuálního tokenu přiřadí vygenerovaný token vložené položce. Stačí zadat funkci generování tokenu a zbytek se provede automaticky.

Poznámka

Aktualizace přístupového tokenu se automaticky podporuje z javascriptové knihovny powerbi-client verze 2.20.1.

Pokud chcete přístupový token aktualizovat automaticky, nastavte při vkládání funkci accessTokenProvider jako parametr v IEmbedConfiguration. Tato funkce je implementována zákazníkem a vrací nový token, když je volána. Když se token blíží vypršení platnosti, element iframe zavolá accesTokenProvider háku, aby získal nový token z hostitelské aplikace, a pak nastaví nový token.

Příklad automatické aktualizace tokenu

Níže je příklad automatické aktualizace přístupového tokenu před vypršením jeho platnosti.

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

Důležité informace a omezení

  • Automatická aktualizace přístupového tokenu se podporuje jenom pro scénář vložení pro vaši organizaci (uživatel vlastní data).
  • Háček události accessTokenProvider by nikdy neměl vyvolat výjimku. Pokud se nepodaří vygenerovat nový token, vrátí hodnotu Null.

Vysvětlení různých řešení pro vkládání