Skip to content

Apps privados

Um app do GoShip é público por padrão: qualquer pessoa com o endereço abre. Num app privado, o GoShip coloca uma página de login na frente de todos os endereços do app — o endereço do GoShip e cada domínio próprio —, tanto no cluster GoShip quanto nos clusters seus. O código do app e o login dele, se tiver um, ficam como estão: o login do GoShip é só a porta de entrada.

Voltar para público tira a página na hora.

Tornar um app privado

Na página do app, o card Access liga e desliga a visibilidade e gerencia as pessoas. Pela CLI:

goship app visibility meu-app private
goship app visibility meu-app public

Para criar o app já privado desde o primeiro deploy:

goship app create meu-app --platform go --private

Um app que nunca recebeu deploy mostra no painel o texto “Private. Takes effect on the first deploy.”: a página entra no ar com o primeiro deploy.

Quem pode entrar

Só quem você cadastrou. Cada pessoa tem um usuário e uma senha, e o app aceita até 25 pessoas.

goship app access list meu-app
goship app access add meu-app ana
goship app access add meu-app ana --password 'uma-senha-de-8-a-72-bytes'
goship app access reset meu-app ana
goship app access rm meu-app ana
ComandoO que faz
goship app access list <app>Lista as pessoas com acesso
goship app access add <app> <usuario>Adiciona alguém; sem --password, o GoShip gera uma senha de 20 caracteres
goship app access reset <app> <usuario> [--password <senha>]Troca a senha e encerra as sessões ativas da pessoa; sem --password, o GoShip gera outra e mostra uma vez
goship app access rm <app> <usuario>Remove a pessoa e encerra a sessão dela na hora

Uma senha gerada aparece uma única vez, na resposta do comando (ou no painel): copie e entregue à pessoa. Se perder, use reset. Senhas que você escolhe têm de 8 a 72 bytes.

Automação: monitores, agentes e webhooks

Quem não é uma pessoa no navegador não consegue preencher o login. Para isso o app tem um token de acesso: envie no cabeçalho

X-GoShip-Access: <token>

ou, quando não dá para mexer em cabeçalhos, na URL: ?goship_access=<token>. Prefira o cabeçalho: URLs vão parar em logs. Se uma URL com o token vazar, gire o token.

goship app access token meu-app            # sem --reveal, o valor fica oculto
goship app access token meu-app --reveal   # mostra o valor
goship app access token meu-app --rotate   # gera outro; o antigo deixa de valer e as sessões ativas são encerradas

Preflights de CORS (OPTIONS) sempre passam, para o navegador conseguir chamar o seu app de outra origem.

Cliente que não é navegador (curl, SDK, webhook) sem sessão e sem token recebe 403 no cluster GoShip e 401 nos clusters seus, nunca a página de login.

O que o visitante vê

Uma página chamada “Entrar em ”, em português quando o navegador prefere português e em inglês nos demais casos. Depois de entrar, a sessão dura 7 dias. Os buscadores recebem noindex. Depois de 5 senhas erradas seguidas para um usuário, esse usuário fica bloqueado por 10 minutos. O app recebe o cabeçalho X-GoShip-User com o usuário de quem entrou; use-o ou ignore-o.

Para sair, mande a pessoa para:

https://goship.sh/gate/logout?app=<id>&rd=<url do app>

O <id> do app aparece em goship app info; rd é para onde a pessoa volta depois.

O painel confirma que está protegido

Na página do app, a linha de status mostra o texto do painel “Protected, checked ” quando tudo está certo. O GoShip testa cada endereço ao tornar o app privado e uma vez por dia; se não conseguir confirmar, o painel avisa com “Could not confirm the login page is in front of ; the app may be open.” Não dê o app como protegido até a linha voltar ao normal.

Limites

  • Kubernetes conectado: não funciona num Kubernetes que você conectou ao GoShip por kubeconfig (Conectar Kubernetes). Funciona no cluster GoShip e nos clusters que o GoShip montou, criados na sua nuvem ou conectados por SSH.
  • Se o portal do GoShip cair, um app privado responde com erro. Ele nunca abre.
  • Toda pessoa cadastrada entra igual: o GoShip não distingue papéis dentro do app. Se o app precisa disso, use o login do próprio app.