Detalhes completos em Credenciais.
Sessões de staff
Consiga uma no cadastro, no login, ou na troca de dois fatores:two_factor_required, depois troque o desafio em
/v1/auth/two-factor dentro de 5 minutos. Veja
Dois fatores.
Depois envie em toda requisição:
403 not_a_member) e deixa a sessão valendo para as outras.
Perder o ÚLTIMO também não mata. O login responde 200 com active_organization_id
nulo e organizations vazio, e a sessão alcança exatamente quatro rotas:
GET /v1/session, GET /v1/organizations, POST /v1/organizations e
POST /v1/session/logout. Todo o resto responde 403 not_a_member. Verifique
active_organization_code antes de mandar alguém para dentro de uma organização.
Chaves de API
Só no servidor. Criadas no painel, mostradas uma vez./v1/me uma vez no start-up para confirmar qual você está segurando.
Chaves publicáveis
Não é header. Vai no corpo dos endpoints que a aceitam:Origin ausente é recusado.
Sessões de contato
Emitidas pelo boot, por um magic link resgatado ou por um código por e-mail. Leem aquele contato e mais nada.verified na sessão diz se a identidade por trás dela foi comprovada. Uma
sessão não verificada é usável e fica marcada, mas é barrada de qualquer coisa por
onde os dados de outra pessoa pudessem vazar.
Falhas
Credencial ausente, malformada, expirada ou revogada, e nada mais. Ela diz que a
credencial acabou, então descartá-la e entrar de novo é a reação certa.
A sessão é válida; a organização nomeada em
X-Organization-Id não é uma das
suas. Mesma resposta para a organização de outra pessoa, para uma que não existe e
para um código malformado — distinguir os casos seria um diretório dos nossos
tenants. O conserto é trocar de organização, nunca deslogar: a sessão continua boa
para as que são suas.Autenticado e membro, mas o seu papel não carrega a permissão. Diferente do
401:
logar de novo não vai ajudar.Também a resposta para um recurso em outra organização ou outro ambiente. O 404
nunca revela qual.
Levando a família errada
Uma credencial bem formada de outra família recebe isso, em vez de um “inválido” seco:401
Não revelar se uma conta existe
Vários endpoints respondem igual havendo ou não conta para aquele endereço. Isso é deliberado e vale preservar se você mexer nesses caminhos:
Sem a equalização de tempo, só contas reais pagariam as dezenas de milissegundos do
bcrypt, e a latência sozinha responderia a pergunta que o código de status se recusa
a responder.