Pular para conteúdo

Autenticação e segurança

O plugin não recebe cookies nem o token global de login do usuário. Recebe contexto e uma capacidade temporária limitada à instalação, usuário e reunião. A identidade vem de identity:read, com permissão declarada.

sequenceDiagram
  participant P as Plugin iframe
  participant E as Elo host
  participant A as Elo API
  P->>E: elo.ready
  E-->>P: elo.context (nonce, escopos, grant)
  P->>E: elo.request (requestId, operação)
  E->>A: Validar instalação, usuário e reunião
  A-->>E: Resultado autorizado
  E-->>P: elo.response (mesmo requestId)

SDK no iframe

Valida origem exata e janela pai, correlaciona requestId e utiliza o nonce do host. Há até 8 operações simultâneas na bridge; o SDK rejeita uma chamada sem resposta após 30 segundos. Capture erros e desfaça o loading. Não use * em postMessage.

Backend externo

O contexto pode incluir session: { token, endpoint, expires }. O grant dura cinco minutos. O servidor confere expiração, instalação, publicação, titularidade e permissões em cada operação.

// Backend: mantenha o grant em memória; não registre seu conteúdo.
const response = await fetch(context.session.endpoint, {
  method: 'POST',
  headers: { Authorization: `Bearer ${context.session.token}`, 'Content-Type': 'application/json' },
  body: JSON.stringify({ operation: 'transcript:read', meetingId: context.meetingId })
});
const result = await response.json();

Renove com await elo.request('session'). Grants de configuração não permitem ler a transcrição; a rota /config trata apenas identidade e preferências. Nunca encaminhe cookies Elo.

Hospedagem e dados

Permita incorporação pelo dashboard com Content-Security-Policy: frame-ancestors https://dash.elomeet.app. Não envie X-Frame-Options: DENY. O iframe usa sandbox, sem câmera, microfone ou geolocalização.

Renderize textos com textContent ou um renderer sanitizado. Não interprete HTML da transcrição. Logs devem conter apenas correlação, operação, status e duração, sem tokens, e-mails completos, transcrições ou notas. A revogação é aplicada no servidor mesmo com o iframe aberto.

Segurança de times

Um time pode exigir aprovação da instalação. Selecionar o time no consentimento cria uma solicitação sem instalar automaticamente. Após aprovação, o usuário confirma a instalação. A API verifica a política novamente ao emitir a sessão e em cada operação sobre a reunião; uma instalação pessoal não contorna a política do time. Erro team_plugin_approval (403) significa que é necessário solicitar a revisão. Remoção do membro ou recusa posterior revoga novas operações.

Transcrições de times podem estar cifradas. O plugin continua usando a mesma API autorizada e recebe texto legível; nunca recebe chaves privadas do time. Ele deve proteger seus próprios logs e dados externos.