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.