Eventos e Mensagens
Uma vez que o Hub foi aberto em modo Popup, toda a troca de informações entre o Hub e a sua aplicação é feita através da API nativa do navegador postMessage.
Sua aplicação deve registrar um ouvinte para o evento message do objeto window, filtrar pela origem correta e tratar os dados retornados.
Atenção ao Cadastro de Origem (Whitelist) A Soluti verifica a URL de origem da aplicação antes de enviar a mensagem de sucesso ou erro. Caso sua aplicação esteja rodando em um domínio não cadastrado em nosso banco de dados, o Hub não enviará os eventos pós-autenticação.
Eventos Retornados
O Certifier Auth Hub dispara os seguintes eventos estruturados em formato JSON:
signature_session_otp
Autenticação concluída com sucesso e código OTP gerado.
otp: Código de uso único gerado.cpf_cnpj: Documento do titular do certificado.session_id: ID UUID da sessão.certifier_id: Código ID da certificadora.certifier_name: Nome amigável do provedor.certifier_image: URL do logotipo da certificadora.expires_at: Timestamp UNIX de expiração do OTP
signature_session_error
Falha ou erro técnico na autenticação.
message: Descrição amigável do erro ocorrido.
signature_session_cancel
O usuário cancelou ativamente a operação ou fechou o Hub.
message: Motivo do cancelamento (ex: popup fechado).
Exemplo de Código Completo para Capturar Eventos
Veja a seguir como implementar o listener e filtrar com segurança a origem das mensagens recebidas para evitar ataques de injeção de mensagens:
// Exemplo de captura de eventos do Certifier Auth Hub
// Domínio de produção oficial
const appUrl = 'https://certifierauthhub.vaultid.com.br';
window.addEventListener('message', (event) => {
// 1. Filtrar eventos apenas do domínio oficial do Hub (exige whitelist prévia na Soluti)
if (event.origin !== appUrl) {
return;
}
const data = event.data;
// 2. Verificar se o evento pertence à estrutura de dados do Hub
if (data && data.type) {
console.log(`[Hub Event] ${data.type}`, data);
// Limpa o polling de fechamento do popup se ele ainda estiver ativo
if (window.authPollTimer) {
clearInterval(window.authPollTimer);
window.authPollTimer = null;
}
switch (data.type) {
case 'signature_session_otp':
console.log('Sucesso! OTP Gerado:', data.otp);
console.log('CPF/CNPJ do titular:', data.cpf_cnpj);
console.log('ID da Sessão:', data.session_id);
console.log('ID do Provedor:', data.certifier_id);
console.log('Nome do Provedor:', data.certifier_name);
console.log('Logotipo do Provedor:', data.certifier_image);
console.log('Expiração do OTP (UNIX):', data.expires_at);
// TODO: Enviar o OTP e o ID da sessão ao seu backend para assinar o documento
// Fechar a janela do popup após o sucesso
if (window.authPopupWindow && !window.authPopupWindow.closed) {
window.authPopupWindow.close();
}
break;
case 'signature_session_error':
console.error('Ocorreu um erro no Hub:', data.message);
alert(`Erro na autenticação: ${data.message}`);
// Fechar a janela do popup devido à falha
if (window.authPopupWindow && !window.authPopupWindow.closed) {
window.authPopupWindow.close();
}
break;
case 'signature_session_cancel':
console.warn('Cancelado pelo usuário:', data.message);
// Limpar referências do popup
window.authPopupWindow = null;
break;
}
}
});Last updated
Was this helpful?