Actualización del token de acceso
La inserción e interacción con el contenido de Power BI (informes, paneles e iconos) requiere un token de acceso. El token de acceso puede ser una token de Azure AD, al insertar para su organización o un token de inserción , al insertar para los clientes. El token de acceso tiene una hora de expiración, lo que significa que después de insertar un elemento de Power BI, tiene una cantidad limitada de tiempo para interactuar con él. Para ofrecer a los usuarios una experiencia continua, actualice (o renueve) el token de acceso antes de que expire.
Hay dos maneras de actualizar el token de acceso:
-
directamente mediante la API de
setAccessToken
- automáticamente si usa un token de Azure AD para insertar para la organización
Actualizar el token de acceso directamente
setAccessToken
se puede usar para actualizar el token de acceso sin volver a cargar el informe insertado.
Úselo cuando el token esté a punto de expirar.
await report.setAccessToken(newAccessToken);
Ejemplo de actualización manual de tokens
Para actualizar el token de acceso manualmente, implemente getNewUserAccessToken(). Esta función llama al back-end de la aplicación para generar un nuevo token de inserción o actualiza el token de Azure AD.
A continuación se muestra un ejemplo de cómo implementar manualmente la función getNewUserAccessToken() para actualizar el token de acceso antes de que expire.
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)
}
});
Actualizar automáticamente el token
Si usa un token de Azure AD para la inserción de para su organización escenario, puede actualizar el token de acceso automáticamente estableciendo un enlace de eventos en los parámetros de configuración de inserción. El enlace de eventos llamará a una función que genera nuevos tokens y asignará el token generado al elemento incrustado antes de que expire el token actual. Lo único que debe hacer es proporcionar la función de generación de tokens y el resto se produce automáticamente.
Nota
La actualización automática del token de acceso se admite desde la versión 2.20.1 de la biblioteca javaScript de powerbi-client.
Para actualizar el token de acceso automáticamente, establezca la función accessTokenProvider
como parámetro en IEmbedConfiguration
al insertar. El cliente implementa esta función y devuelve un token nuevo cuando se llama a ella.
Cuando el token esté cerca de expirar, el iframe llamará al enlace de accesTokenProvider
para adquirir un nuevo token de la aplicación de hospedaje y, a continuación, establecerá el nuevo token.
Ejemplo de token de actualización automática
A continuación se muestra un ejemplo de cómo actualizar automáticamente el token de acceso antes de que expire.
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);
Consideraciones y limitaciones
- La actualización automática del token de acceso solo se admite para el escenario de inserción de para la organización (datos propios del usuario).
- El enlace de eventos
accessTokenProvider
nunca debe producir una excepción. Si no se puede generar un nuevo token, devuelva un valor Null.