Pular para o conteúdo

Access

O Access põe um portão na frente de um caminho do seu site, como /admin*, um site de staging ou um preview, sem nenhuma mudança no app. O portão pede uma de duas coisas:

  • Uma senha que você passa para quem precisa entrar.
  • Um e-mail da sua lista. O visitante digita e recebe um link de entrada que vale uma vez, por 15 minutos.

Quem entra ganha um cookie assinado e navega pelo tempo de sessão que você definir. Com o link por e-mail, o seu app recebe num cabeçalho o e-mail de quem entrou, então sabe quem está ali. O portão segura também no modo observar, porque é uma tranca que você pôs e não um palpite, então um site de staging fica privado desde o primeiro dia.

O Access faz parte do plano Pro.

Ele roda no conector: o proxy do Qlyne, o conector hospedado ou o Worker da Cloudflare. Com o conector instalado:

  1. No painel, abra o seu site e vá em Access, Configuração.
  2. Clique em Adicionar portão. Dê um nome, escolha como as pessoas entram, acrescente as rotas, depois os e-mails ou a senha, e o tempo de sessão.
  3. Pronto fecha a janela. Salve a página: o portão só vale depois disso, e o conector o recebe em até um minuto.
  4. Abra uma das rotas numa janela anônima. Deve aparecer a página “Acesso restrito”.

No proxy e no hospedado, todo pedido passa pelo conector, então qualquer caminho pode ter portão. Na Cloudflare, as rotas do Worker precisam cobrir os caminhos do portão. O limite de tentativas de senha usa o limite de requisições da Cloudflare, que exige o conector publicado com o Wrangler e o wrangler.toml do painel (veja Instale o conector). Na instalação pelo painel da Cloudflare o portão funciona, mas as tentativas não são limitadas.

Cada portão tem:

  • Nome: aparece no painel e no e-mail de entrada. Cada nome é usado uma vez por site.
  • Como as pessoas entram: Link por e-mail ou Senha.
  • Rotas: os caminhos que o portão tranca, começando com /. * casa com o resto, então /admin* cobre /admin, /admin/ e tudo abaixo, imagens e scripts incluídos. /* tranca o site inteiro. Até 50 rotas por portão.
  • Quem pode entrar (link por e-mail): endereços, ou @suaempresa.com.br para todo mundo com endereço de lá. Até 200 por portão.
  • Senha: pelo menos 8 caracteres. O Qlyne guarda só um hash dela, então ninguém consegue lê-la de volta. Com uma senha já definida, o campo mostra “Definida, digite para trocar”; deixe vazio para manter a atual.
  • Fica logado por: 1 hora, 12 horas (o padrão), 1 dia ou 1 semana.

Um site pode ter até 10 portões. Cada portão tem a sua sessão: entrar em /staging não abre /admin. Se dois portões cobrem o mesmo caminho, vale o primeiro da lista.

O Access não tem níveis de proteção: o que trancar é uma escolha sobre o seu site, não uma intensidade. Os portões também fazem parte das regras como código e do servidor MCP, e nenhum dos dois devolve a senha.

Quem entrou pelo link por e-mail chega ao seu app com o cabeçalho Qlyne-Gate-User e o seu e-mail, mesmo com os outros sinais desligados. O portão por senha não manda e-mail, porque todo mundo usa a mesma senha. O conector remove qualquer cabeçalho Qlyne-* que o visitante mande, então o valor não pode ser forjado.

// Node
const who = req.headers['qlyne-gate-user'] || null;
// Laravel
$who = $request->header('Qlyne-Gate-User');
  • Um navegador sem sessão: 401 com a página “Acesso restrito”. O portão por senha mostra “Digite a senha para continuar.” e o botão Entrar. O portão por e-mail mostra “Digite seu e-mail para receber um link de acesso.” e o botão Enviar link.
  • Depois de pedir o link: “Confira seu e-mail”. A página diz o mesmo para todo mundo, esteja na lista ou não, então nunca revela quem tem acesso. O e-mail chega com o assunto “Access link: ” e o endereço do seu site, e um botão Sign in.
  • A senha certa ou um link válido: o visitante cai na página que pediu, já dentro da sessão.
  • Uma senha errada: a mesma página com “Senha errada.”. Mais de 10 tentativas num minuto do mesmo IP recebem 429 e “Muitas tentativas. Espere um minuto e tente de novo.”
  • Um link já usado, ou com mais de 15 minutos: “Link vencido”, com o convite para pedir outro.
  • Uma chamada de API ou um script sem sessão: 401 com {"code": "GATE_REQUIRED"}.
  • Um IP confiável das listas de IP pula o portão junto com todas as outras regras.

As páginas do portão seguem o idioma do navegador do visitante, inglês ou português.

  • O e-mail de entrada sai em inglês por enquanto, qualquer que seja o idioma do visitante.
  • Trocar a senha ou tirar um endereço da lista não desconecta quem já entrou. A sessão dessa pessoa dura até vencer. Renomear o portão desconecta todo mundo dele de uma vez.
  • A sessão tem duração fixa, contada a partir do momento em que a pessoa entrou. Não há saída por inatividade.
  • O portão não tem verificação em duas etapas nem login único (SSO). Não há portão por endereço IP; ponha o endereço como confiável nas listas de IP.
  • Os Relatórios do Access contam quantas pessoas o portão parou e quantas entraram, sem dizer quem entrou. O e-mail vai só para o seu app, em Qlyne-Gate-User.
  • As tentativas de senha são contadas por IP. Com mais de um proxy, cada um conta a sua parte.

Não. Mantenha o login do seu app. O portão fica na frente dele: quem não tem a senha ou não está na lista nem chega à página de login, então robô não consegue tentar senhas nela. Com o link por e-mail, o seu app ainda pode ler Qlyne-Gate-User para saber quem passou pelo portão.

Use um portão por link por e-mail com @suaempresa.com.br em Quem pode entrar: todo mundo com endereço de lá entra com o próprio link, e o seu app vê quem é cada um. Acrescente gente de fora um endereço por vez, até 200 por portão. Senha compartilhada também funciona, mas quando alguém sai você precisa trocá-la e renomear o portão para desconectar todo mundo.

Dá, pelo firewall. Ponha o seu endereço como confiável nas listas de IP: ele pula o portão e todas as outras regras, o desafio e os limites de requisições incluídos. Use para o escritório ou para um monitor de disponibilidade. Os outros continuam encontrando o portão.

Não. A sessão mora num cookie do navegador em que você entrou. Outro navegador, o celular ou uma janela anônima pedem de novo. O cookie não está preso ao seu IP, então trocar de rede mantém você dentro até a sessão acabar.

Não, o Access faz parte do Pro. Toda conta nova ganha 7 dias de Pro, sem cartão. No Free, os portões ficam salvos no painel, mas o conector não os aplica, então os caminhos que eles trancavam ficam abertos para todo mundo. Se um site voltar para o Free, confira o que estava atrás de um portão. Veja Planos.

A página diz “Confira seu e-mail” para todo mundo, então confira a lista primeiro:

  • O endereço está em Quem pode entrar exatamente como foi digitado, ou o domínio está lá com @.
  • A página foi salva depois do Pronto, e o site está no Pro.
  • Um endereço recebe até 5 links em 15 minutos. Os pedidos seguintes não mandam e-mail; espere e peça de novo.
  • O e-mail vem do Qlyne, em inglês, com o assunto “Access link: ” e o endereço do seu site. Olhe a caixa de spam.

O navegador não está guardando o cookie do portão. Três causas, da mais comum para a menos:

  • O site é servido em HTTP puro. O cookie só é guardado em HTTPS. Sirva o site em HTTPS.
  • O proxy fica atrás do seu servidor web, que não manda X-Forwarded-Proto. Aí o link de entrada começa com http://. Acrescente o cabeçalho como no guia do proxy.
  • O navegador bloqueia cookies do seu site. Libere, ou tente outro navegador.

Renomear um portão ou trocar o segredo do conector também pede uma nova entrada a todo mundo.

Chamadas sem sessão recebem 401 com {"code": "GATE_REQUIRED"}, e o formulário só funciona num navegador. Uma página dentro do portão que chama a própria API com fetch manda o cookie, então continua funcionando. Para outros chamadores, como um app de celular, um webhook ou um servidor:

  • Liste em Rotas só os caminhos a trancar, e deixe a API de fora. Um portão em /* cobre todos os caminhos.
  • Ou ponha o IP de quem chama como confiável nas listas de IP.