[Dúvida] A melhor forma de lidar com logins
Eu estou trabalhando em um projeto para uma empresa que envolve o desenvolvimento de um app mobile para alguns funcionários responderem relatórios sobre o serviço realizado por eles dentro da empresa, e com isso surgiu uma dúvida um tanto pertinente. Eu trabalhei muito pouco com desenvolvimento mobile, então me falta algumas boas práticas sobre o desenvolvimento da estrutura de um app como esse, principalmente na questão de segurança.
A stack do app é composta por um backend em Django e o rest framework, e dois frontends em React.js e React Native. No passado, utilizei sessões com React.js para criar um ambiente de autenticação, mas nas minhas pesquisas, vi muita coisa sobre o que seria o ideal no caso de uma aplicação Rest, como a utilização de JWTs, oauth2, entre outras especificações. Por padrão, o REST Framework possui uma autenticação simples usando Tokens, porém foi aí que comecei a entender o conceito de autenticação stateless e stateful. JWTs e tokens opacos possuem algum tipo de criptografia que permite validar o conteúdo que está inserido dentro do token, enquanto tokens como do DRF não possuem esse tipo de tecnologia, ele já é uma chave associada ao usuário dentro do banco de dados. A parte boa de autenticação stateless é que enconomizamos nas consultas ao banco de dados, logicamente economizando uso do disco, mas adicionamos uma carga ao CPU, que cada consulta necessita validar o token JWT.
Algo que achei interessante no estudo dessa parte é que no geral, autenticação baseada em token, autenticação baseada em sessão e até autenticação básica são praticamente a mesma coisa, diferente do JWT que você realmente possui as informações importantes e necessárias para a aplicação. Isso porque todas essas outras autenticações recorrem ao banco de dados em algum momento para verificar o usuário.
O que eu entendi
A ideia de autenticações stateless é justamente diminuir a carga do servidor, mas algo que também vi sobre essas autenticações é que no final elas nunca serão 100% stateless, e isso realmente não me importa, mas preciso que elas sejam seguras no ambiente mobile, agora o que eu não entendi corretamente é como funciona a questão de uma sessão contínua, aparentemente eu posso definir o timeout do refresh token por um tempo longo, o que já resolve esse problema, mas ainda estou incerto se é a melhor maneira de ser feito, então gostaria da opinião de vocês sobre esse assunto!


