Udostępnij za pośrednictwem


Odświeżanie tokenu dostępu

Osadzanie i interakcja z zawartością usługi Power BI (raportami, pulpitami nawigacyjnymi i kafelkami) wymaga tokenu dostępu. Token dostępu może być tokenem usługi Azure ADpodczas osadzania dla organizacji lub tokenem osadzania podczas osadzania dla klientów. Token dostępu ma czas wygaśnięcia, co oznacza, że po osadzeniu elementu usługi Power BI masz ograniczony czas na interakcję z nim. Aby zapewnić użytkownikom ciągłe środowisko, odśwież (lub odnów) token dostępu przed jego wygaśnięciem.

Istnieją dwa sposoby odświeżania tokenu dostępu:

  • bezpośrednio przy użyciu interfejsu API setAccessToken
  • automatycznie, jeśli używasz tokenu usługi Azure AD na potrzeby osadzania dla organizacji

Odświeżanie tokenu dostępu bezpośrednio

setAccessToken można użyć do zaktualizowania tokenu dostępu bez ponownego ładowania osadzonego raportu. Użyj go, gdy token wygaśnie.

await report.setAccessToken(newAccessToken);

Przykład ręcznego odświeżania tokenu

Aby ręcznie odświeżyć token dostępu, zaimplementuj metodę getNewUserAccessToken(). Ta funkcja wywołuje zaplecze aplikacji w celu wygenerowania nowego tokenu osadzania lub odświeżenia tokenu usługi Azure AD.

Poniżej przedstawiono przykład ręcznego zaimplementowania funkcji getNewUserAccessToken() w celu odświeżenia tokenu dostępu przed jego wygaśnięciem.

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

Automatyczne odświeżanie tokenu

Jeśli używasz tokenu usługi Azure AD dla scenariusza osadzania dla organizacji scenariusza, możesz automatycznie odświeżyć token dostępu, ustawiając punkt zaczepienia zdarzeń w parametrach konfiguracji osadzania. Punkt zaczepienia zdarzeń wywoła funkcję, która generuje nowe tokeny i przypisze wygenerowany token do elementu osadzonego przed wygaśnięciem bieżącego tokenu. Wystarczy podać funkcję generowania tokenu, a reszta odbywa się automatycznie.

Nuta

Automatyczne odświeżanie tokenu dostępu jest obsługiwane z poziomu biblioteki JavaScript klienta powerbi w wersji 2.20.1.

Aby automatycznie odświeżyć token dostępu, ustaw funkcję accessTokenProvider jako parametr w IEmbedConfiguration podczas osadzania. Ta funkcja jest implementowana przez klienta i zwraca nowy token po wywołaniu. Gdy token jest bliski wygaśnięcia, element iframe wywoła element accesTokenProvider hook w celu uzyskania nowego tokenu z aplikacji hostingu, a następnie ustawi nowy token.

Przykład automatycznego odświeżania tokenu

Poniżej przedstawiono przykład automatycznego odświeżania tokenu dostępu przed jego wygaśnięciem.

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

Zagadnienia i ograniczenia

  • Automatyczne odświeżanie tokenu dostępu jest obsługiwane tylko w przypadku scenariusza osadzania dla organizacji (użytkownik jest właścicielem danych).
  • Hak zdarzeń accessTokenProvider nigdy nie powinien zgłaszać wyjątku. Jeśli nie uda się wygenerować nowego tokenu, zwróć wartość null.

Omówienie różnych rozwiązań osadzania