Atualizar o token de acesso

Inserir e interagir com o conteúdo do Power BI (relatórios, dashboards e blocos) requer um token de acesso. O token de acesso pode ser um token do Azure AD, ao inserir para sua organização ou um token de inserção , ao inserir para seus clientes. O token de acesso tem um tempo de expiração, o que significa que, depois de inserir um item do Power BI, você tem um tempo limitado para interagir com ele. Para dar aos usuários uma experiência contínua, atualize (ou renove) o token de acesso antes de expirar.

Há duas maneiras de atualizar o token de acesso:

  • diretamente usando a API de setAccessToken
  • automaticamente se você estiver usando um token do Azure AD para inserir para sua organização

Atualizar o token de acesso diretamente

setAccessToken pode ser usado para atualizar o token de acesso sem recarregar o relatório inserido. Use-o quando o token estiver prestes a expirar.

await report.setAccessToken(newAccessToken);

Exemplo de atualização de token manual

Para atualizar o token de acesso manualmente, implemente getNewUserAccessToken(). Essa função chama o back-end do aplicativo para gerar um novo token de inserção ou atualiza o token do Azure AD.

Veja abaixo um exemplo de como implementar manualmente a função getNewUserAccessToken() para atualizar o token de acesso antes de expirar.

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

Atualizar token automaticamente

Se você estiver usando um token do Azure AD para o inserir para sua organização cenário, você poderá atualizar o token de acesso automaticamente definindo um gancho de evento em seus parâmetros de configuração de inserção. O gancho de evento chamará uma função que gera novos tokens e atribuirá o token gerado ao item inserido antes que o token atual expire. Tudo o que você precisa fazer é fornecer a função de geração de token e o restante acontece automaticamente.

Nota

Atualizar o token de acesso automaticamente é compatível com a biblioteca JavaScript do cliente powerbi versão 2.20.1.

Para atualizar o token de acesso automaticamente, defina a função accessTokenProvider como um parâmetro em IEmbedConfiguration ao inserir. Essa função é implementada pelo cliente e retorna um token novo quando é chamado. Quando o token estiver perto de expirar, o iframe chamará o gancho de accesTokenProvider para adquirir um novo token do aplicativo de hospedagem e, em seguida, definirá o novo token.

Atualizar automaticamente o exemplo de token

Veja abaixo um exemplo de como atualizar automaticamente o token de acesso antes de expirar.

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

Considerações e limitações

  • A atualização automática do token de acesso só tem suporte para o inserção para o cenário de da sua organização (o usuário possui dados).
  • O gancho de evento accessTokenProvider nunca deve gerar uma exceção. Se não conseguir gerar um novo token, retorne um valor Nulo.

Noções básicas sobre as diferentes soluções de inserção