Renovação de Embed Token¶
Este guia mostra como manter o iframe do TOMODAT autenticado sem recarregar a página.
Como funciona¶
Quando o token expira (ou está perto de expirar):
- O iframe do TOMODAT envia:
{ "type": "tomodat-embed-token-expired" }- O sistema parceiro gera novo token em
POST /api/integration/embed-token. - O sistema parceiro envia ao iframe:
{ "type": "tomodat-embed-auth", "token": "<novo_token>", "tenant": "<tenant_id>" }- O TOMODAT aplica o novo token e continua as requisições pendentes.
Exemplo visual do fluxo em execução:

Exemplo completo (JavaScript no parent)¶
const TOMODAT_ORIGIN = 'https://dev3.tomodat.com';
const iframe = document.getElementById('tomodat-iframe');
async function fetchNewEmbedToken(tenantId) {
// Chame o seu backend (nunca use API key no browser).
const response = await fetch(`/api/internal/tomodat/embed-token?tenant=${encodeURIComponent(tenantId)}`, {
method: 'POST',
credentials: 'include'
});
if (!response.ok) {
throw new Error(`Falha ao renovar embed token (${response.status})`);
}
const data = await response.json();
return data.embed_token;
}
window.addEventListener('message', async (event) => {
// Sempre valide origem.
if (event.origin !== TOMODAT_ORIGIN) return;
const message = event.data;
if (message?.type !== 'tomodat-embed-token-expired') return;
try {
const tenantId = 'acme_isp';
const newToken = await fetchNewEmbedToken(tenantId);
iframe.contentWindow?.postMessage(
{
type: 'tomodat-embed-auth',
token: newToken,
tenant: tenantId
},
TOMODAT_ORIGIN
);
} catch (error) {
console.error('Falha ao renovar token de embed:', error);
// Opcional: exibir aviso para o usuário final.
}
});
Boas práticas de segurança¶
- Gere token apenas no backend do sistema parceiro.
- Nunca exponha
X-Integration-API-Keyno frontend. - Sempre valide
event.originno listener demessage. - Use origin explícita no
postMessagede retorno (evite*).
Erros comuns¶
iframe não renova e cai em auth-error¶
Verifique:
- Seu parent está escutando o evento
tomodat-embed-token-expired. - O novo token está sendo realmente gerado.
- A origin do
postMessagede retorno corresponde ao domínio do TOMODAT.
renovação em loop¶
Causas frequentes:
- Token emitido para tenant errado.
- Token inválido ou já expirado.
- Mensagem
tomodat-embed-authsem campotoken.