Começo
Autenticação
Sessão em cookie, token Bearer, os dois eixos de papel e o limite de requisições.
Toda instalação exige conta, e não há chave de ambiente nem de tela que desligue isso. A única exceção é o modo demonstração, em que qualquer pessoa entra sem credencial.
Duas credenciais, uma identidade
As duas terminam na mesma identidade, e o cookie tem precedência: numa aba logada que também mandasse o cabeçalho, vale a identidade da sessão.
TOKEN=... # copiado de Minha conta → Segurança
curl -s http://localhost:3000/api/board \
-H "Authorization: Bearer $TOKEN"Não há segredo de servidor a configurar
O token de sessão é opaco (32 bytes aleatórios), e o que fica gravado é o sha256 dele; a senha é derivada com scrypt. Nenhuma chave a gerar, rotacionar ou vazar: um dump do banco não devolve credencial utilizável.
O token de API
- Existe um por pessoa: gerar de novo revoga o anterior, então revogar é uma ação só.
- O valor em claro sai uma vez, na resposta que o criou. Perdeu, gera outro.
- O que sobra na linha, além do
sha256, são os quatro últimos caracteres, o suficiente para a tela dizer qual token o seu script carrega.
Dois eixos de papel, e vale o mais restrito
Um VIEWER da instalação não escreve em lugar nenhum, mesmo sendo MEMBER de um espaço. E ADMIN é membro implícito de todos: sem essa regra, um espaço cujo último membro saiu ficaria sem ninguém que pudesse devolver o acesso a ele.
A matriz, e a regra que a fecha
/api/profile* tem entrada própria porque a regra padrão mandaria escrita para MEMBER, e isso trancaria um VIEWER fora do próprio perfil: ele não escreve no quadro, mas troca a própria senha e o próprio avatar.
A segunda conferência: qual espaço de trabalho
A conferência de papel não sabe de que espaço é o recurso: /api/cards/[id] traz só o id do card. Por isso o acesso ao espaço é conferido dentro da transação, junto com a leitura do recurso.
Não ser membro é 403, e não 404
Pedir um recurso de um espaço que a conta não alcança devolve 403, e não 404. Assim a resposta é a mesma para um id que existe e para um id inventado, e não revela quais espaços existem.
Controle de abuso
O contador do login inclui o e-mail alvo: num escritório atrás do mesmo IP, o erro de digitação de uma pessoa não tranca as outras. O 429 sempre traz Retry-After, em segundos.