Обновление маркера доступа

Для внедрения содержимого Power BI (отчетов, панелей мониторинга и плиток) и взаимодействия с ним требуется маркер доступа. Маркер доступа может быть маркером Azure AD при внедрении для вашей организации или маркером внедрения при внедрении для клиентов. Срок действия маркера доступа означает, что после внедрения элемента Power BI у вас есть ограниченное время для взаимодействия с ним. Чтобы обеспечить непрерывное взаимодействие с пользователями, обновите (или обновите) маркер доступа до истечения срока его действия.

Обновить маркер доступа можно двумя способами.

Обновление маркера доступа напрямую

setAccessToken можно использовать для обновления маркера доступа без перезагрузки внедренного отчета. Используйте его при истечении срока действия маркера.

await report.setAccessToken(newAccessToken);

Пример обновления маркера вручную

Чтобы обновить маркер доступа вручную, реализуйте getNewUserAccessToken(). Эта функция вызывает серверную часть приложения для создания нового маркера внедрения или обновляет маркер Azure AD.

Ниже приведен пример того, как вручную реализовать функцию getNewUserAccessToken() для обновления маркера доступа до истечения срока его действия.

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

Автоматическое обновление маркера

Если вы используете маркер Azure AD для сценария внедрения для организации, вы можете автоматически обновить маркер доступа, задав перехватчик событий в параметрах конфигурации внедрения. Обработчик событий вызывает функцию, которая создает новые маркеры и назначает созданный маркер внедренным элементам до истечения срока действия текущего маркера. Все, что вам нужно сделать, это предоставить функцию создания маркеров, а остальное происходит автоматически.

Примечание

Автоматическое обновление маркера доступа поддерживается из библиотеки JavaScript powerbi-client версии 2.20.1.

Чтобы автоматически обновить маркер доступа, задайте функцию accessTokenProvider в качестве параметра в IEmbedConfiguration при внедрении. Эта функция реализуется клиентом и возвращает новый маркер при вызове. Когда срок действия маркера близок к истечению срока действия, iframe вызовет accesTokenProvider перехватчик, чтобы получить новый маркер из приложения размещения, а затем установит новый маркер.

Пример автоматического обновления маркера

Ниже приведен пример автоматического обновления маркера доступа до истечения срока его действия.

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

Рекомендации и ограничения

  • Автоматическое обновление маркера доступа поддерживается только для сценария внедрения для вашей организации (данные принадлежат пользователю).
  • Перехватчик accessTokenProvider событий никогда не должен вызывать исключение. Если не удается создать новый маркер, верните значение NULL.

Дальнейшие действия

Основные сведения о различных решениях внедрения