Bob usa um aplicativo da web para conseguir algo. E:
- Seu navegador está em dieta, portanto não suporta cookies .
- A aplicação web é popular, lida com muitos usuários em um determinado momento - tem que escalar bem. Contanto que manter a sessão imponha um limite para o número de conexões simultâneas e, é claro, trará uma penalidade de desempenho não desprezível , gostaríamos de ter um sistema sem sessão :)
Algumas notas importantes:
- temos segurança de transporte ( HTTPS e seus melhores amigos);
- por trás das cortinas, o aplicativo da web delega muitas operações para serviços externos , em nome do usuário atual (esses sistemas reconhecem Bob como um de seus usuários) - isso significa que temos que encaminhar a eles as credenciais de Bob .
Agora, como autenticamos Bob (em cada solicitação)? Qual seria uma forma razoável de implementar tal coisa?
- jogar tênis com as credenciais via campos ocultos do formulário HTML ... a bola contém as credenciais ( nome de usuário e senha ) e as duas raquetes são o navegador e o aplicativo da web, respectivamente. Em outras palavras, podemos transportar dados de um lado para outro por meio de campos de formulário em vez de cookies. A cada solicitação da web, o navegador publica as credenciais. Embora, no caso de um aplicativo de página única , isso possa parecer como jogar squash contra uma parede de borracha, em vez de jogar tênis , já que o formulário da web que contém as credenciais pode ser mantido vivo durante toda a vida da página da web (e o servidor será configurado para não oferecer as credenciais de volta).
- armazenar o nome de usuário e a senha no contexto da página - variáveis JavaScript etc. Página única necessária aqui, IMHO.
- autenticação baseada em token criptografado. Nesse caso, a ação de login resultaria na geração de um token de segurança criptografado (nome de usuário + senha + outra coisa). Este token seria devolvido ao cliente e as próximas solicitações seriam acompanhadas pelo token. Isso faz sentido? Já temos HTTPS ...
- outras...
- último recurso: não faça isso, armazene as credenciais na sessão! A sessão é boa. Com ou sem cookies.
Você tem alguma preocupação com a web / segurança em relação a alguma das ideias descritas anteriormente? Por exemplo,
- limite de tempo - podemos manter um carimbo de data / hora , junto com as credenciais (carimbo de data / hora = a hora em que Bob inseriu suas credenciais). Por exemplo, quando NOW - timestamp> threshold , podemos negar a solicitação.
- Proteção de script entre sites - não deve ser diferente de forma alguma, certo?
Muito obrigado por reservar um tempo para ler isso :)