Conteúdo original nessa thread do Twitter
Ei dev front e back-ender,
Pega esse desafio! Quero ver você resolver essa treta de segurança num CRUD.
Se quiser, pode fazer em dupla ou individual. E tá valendo nota :)
Segue o fio.
cc @sseraphini
↓
O desafio é fazer um CRUD de qualquer coisa numa área logada. Toda operação que modifica o estado do banco (criar, apagar, editar) precisa de um token de expiração rápida (tipo ~5 segundos, por exemplo). E toda operação de leitura (listar, detalhar), um token de leitura.
Segue as specs dos endpoints:
Segurança:
- POST para obter token de leitura.
- POST para obter token de escrita com expiração rápida.
CRUD:
Endpoints que aceitam token de leitura:
- GET para obter a coleção das coisas do CRUD.
- GET para obter um item da coleção (tipo "por id").
Endpoints que aceitam token de escrita:
- POST pra criar um item.
- PUT para editar um item.
- DELETE para excluir um item.
Um detalhe sobre os endpoints de escrita: se você fizer uma chamada com o token de leitura ou sem token, estes devem retornar um HTTP 401 com um challenge ─ ou seja, um header WWW-Authenticate com informações sobre como conseguir permissão de acesso.
https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/WWW-Authenticate
Agora uns detalhes mais específicos pros frontenders:
Reuse o token de leitura do login. Não fique pedindo as credenciais pro usuário o tempo todo durante uma sessão.
Tente não deixar pro front saber quais são os endpoints de escrita. Tente se valer dos responses HTTP 401.
Se você quiser focar apenas no front, use APIs mocadas ─ desencana do backend.
Se quiser focar apenas no backend, desenvolva e teste no postman, curl, insomnia, etc.
Se você quiser uma camada extra de desafio, pense numa forma de usar um método diferente de autenticação pros tokens de escrita, tipo um OTP, reconhecimento facial, etc.
Faça do jeito que você quiser, mude o que quiser. O importante é aprender se divertindo.
Se fizer e versionar no github ganha ponto extra e se hospedar pra gente testar, passa direto de ano!
Se achou o desafio legal, dá um RT do amor, like, comenta.
Preciso nem dizer, né? Se leu até aqui, dá um abraço!
Obrigado demais pela moral, eu faço essas coisas pra você me apoia. ❤️
Top comments (3)
Olá Francisco tudo bem?
Se vc quiser, existe uma tag de devs brasileiros.
Só por na aŕea de tags braziliandevs
Seu texto será mais visto por brasileiros
#braziliandevs
Boa, valeu... vou incluir aqui :)
Eai, um login que gera um token permanente - não um JWT - é algo que pratico frequentemente até, ai tem muitas opções de onde persistir este token hashed ou não no servidor.
Agora um token que expira, eu tentaria usar algo mais parecido com um JWT.
Mas para ficar mais interessante - e sem saber ao certo se isso adicionaria mais ou menos segurança pois por muitos caminhos algo pode dar errado - tentaria usar um par de chaves publica/privada para cada usuário - ou uma só talvez dependendo da aplicação.
Já no servidor que faz a escrita/update/delete em si
Faz algum sentido? :P