Skip to content

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

  1. O iframe do TOMODAT envia:
  2. { "type": "tomodat-embed-token-expired" }
  3. O sistema parceiro gera novo token em POST /api/integration/embed-token.
  4. O sistema parceiro envia ao iframe:
  5. { "type": "tomodat-embed-auth", "token": "<novo_token>", "tenant": "<tenant_id>" }
  6. O TOMODAT aplica o novo token e continua as requisições pendentes.

Exemplo visual do fluxo em execução:

Log de renovação de token

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-Key no frontend.
  • Sempre valide event.origin no listener de message.
  • Use origin explícita no postMessage de 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 postMessage de 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-auth sem campo token.