Como funciona a autenticação baseada em cookies?

210

Alguém pode me dar uma descrição passo a passo de como funciona a autenticação baseada em cookie? Eu nunca fiz nada que envolva autenticação ou cookies. O que o navegador precisa fazer? O que o servidor precisa fazer? Em que ordem? Como mantemos as coisas seguras?

Eu tenho lido sobre diferentes tipos de autenticação e sobre cookies, mas gostaria de uma descrição básica de como usar os dois juntos - só li que eles são usados ​​juntos, mas não conseguiram encontrar uma descrição de como.

Mastid
fonte

Respostas:

162

Um cookie é basicamente apenas um item de um dicionário. Cada item tem uma chave e um valor. Para autenticação, a chave pode ser algo como 'nome de usuário' e o valor seria o nome de usuário. Cada vez que você faz uma solicitação para um site, seu navegador inclui os cookies na solicitação e o servidor host verifica os cookies. Portanto, a autenticação pode ser feita automaticamente assim.

Para definir um cookie, basta adicioná-lo à resposta que o servidor envia após solicitações. O navegador adicionará o cookie ao receber a resposta.

Existem diferentes opções que você pode configurar para o servidor de cookies, como prazos de validade ou criptografia. Um cookie criptografado é geralmente chamado de cookie assinado. Basicamente, o servidor criptografa a chave e o valor no item do dicionário, para que apenas o servidor possa usar as informações. Então, o cookie estaria seguro.

Um navegador salvará os cookies definidos pelo servidor. No cabeçalho HTTP de cada solicitação que o navegador faz nesse servidor, ele adiciona os cookies. Ele adicionará apenas cookies para os domínios que os definem. O Example.com pode definir um cookie e também adicionar opções no cabeçalho HTTP para que os navegadores enviem o cookie de volta aos subdomínios, como sub.example.com. Seria inaceitável para um navegador enviar cookies para um domínio diferente.

Conor Patrick
fonte
O que eu entendo é que o navegador pode enviar o cookie de volta ao mesmo domínio. Em relação a isso, o navegador leva em conta o subdomínio ao diferenciar entre dois domínios?
Aakash
1
Você pode definir opções no cabeçalho HTTP para saber como um navegador lida com subdomínios.
Conor Patrick
288

Sei que isso está atrasado anos, mas pensei em expandir a resposta de Conor e acrescentar um pouco mais à discussão.

Alguém pode me dar uma descrição passo a passo de como funciona a autenticação baseada em cookie? Eu nunca fiz nada que envolva autenticação ou cookies. O que o navegador precisa fazer? O que o servidor precisa fazer? Em que ordem? Como mantemos as coisas seguras?

Etapa 1: Cliente> Registrando-se

Antes de mais nada, o usuário precisa se inscrever. O cliente lança uma solicitação HTTP no servidor que contém seu nome de usuário e senha.

Etapa 2: Servidor> Manipulando inscrição

O servidor recebe essa solicitação e faz o hash da senha antes de armazenar o nome de usuário e a senha no seu banco de dados. Dessa forma, se alguém obtiver acesso ao seu banco de dados, não verá as senhas reais dos usuários.

Etapa 3: Cliente> Login do Usuário

Agora seu usuário efetua login. Ele fornece seu nome de usuário / senha e, novamente, isso é postado como uma solicitação HTTP no servidor.

Etapa 4: servidor> validando o login

O servidor procura o nome de usuário no banco de dados, faz o hash da senha de login fornecida e a compara com a senha do hash anteriormente no banco de dados. Caso contrário, podemos negar o acesso enviando um código de status 401 e finalizando a solicitação .

Etapa 5: Servidor> Gerando token de acesso

Se tudo der certo, vamos criar um token de acesso, que identifica exclusivamente a sessão do usuário. Ainda no servidor, fazemos duas coisas com o token de acesso:

  1. Armazene-o no banco de dados associado a esse usuário
  2. Anexe-o a um cookie de resposta a ser retornado ao cliente. Certifique-se de definir uma data / hora de vencimento para limitar a sessão do usuário

A partir de agora, os cookies serão anexados a todas as solicitações (e respostas) feitas entre o cliente e o servidor.

Etapa 6: Cliente> Fazendo solicitações de página

De volta ao lado do cliente, agora estamos logados. Toda vez que o cliente solicita uma página que requer autorização (ou seja, eles precisam estar logados), o servidor obtém o token de acesso do cookie e o verifica em relação àquele no banco de dados associado a esse usuário. Se sair, o acesso é concedido.

Isso deve ajudar você a começar. Certifique-se de limpar os cookies ao sair!

pllx
fonte
10
Obrigado pela descrição. Eu me pergunto como o token de acesso fornece segurança? Um invasor pode roubar o cookie e se passar por um usuário autenticado? Ou isso é protegido por SSL?
Richeek
6
O @Richeek SSL protege a interceptação durante solicitações / respostas, mas um invasor pode acessar seus cookies nos pontos de extremidade (por exemplo, seu navegador). Teoricamente, eles poderiam se passar por um usuário conectado até que o cookie expire. Eu digo "teoricamente" porque a implementação acima não lida com isso. Na implementação acima, o invasor terá acesso até que o token de acesso no seu banco de dados seja atualizado (ou seja, próximo login).
Pllx #
14
Você pode invalidar o token de acesso ao expirar, talvez com uma "data de validade" no seu banco de dados. Ou, você pode considerar o uso de JSON Web Tokens (JWT) , que são como tokens de acesso, mas podem lidar com a expiração de token entre outras coisas. Mais sobre JWT aqui. Um invasor ainda terá acesso à sua conta por breves períodos de tempo se tiver seu token de acesso / JWT, portanto, você também deve proteger seus pontos de extremidade.
Pllx #
3
Demorei muito para dizer obrigado! Obrigado pela sua explicação.
Richeek
4
@ManuChadha, você pode, juntamente com a chave do token / sessão, salvar também o endereço IP do usuário, juntamente com outros parâmetros de identificação, como user agent, etc. Se a solicitação vier com um cookie válido, mas com o ip, navegador etc. incorretos negar a solicitação e redirecionar o usuário para a página de login para autenticar novamente.
FalcoGer 11/11/19
18

Autenticação baseada em cookie

A autenticação baseada em cookies funciona normalmente nestas 4 etapas:

  1. O usuário fornece um nome de usuário e senha no formulário de login e clica em Log In.
  2. Após a solicitação, o servidor valida o usuário no back-end consultando o banco de dados. Se a solicitação for válida, ele criará uma sessão usando as informações do usuário buscadas no banco de dados e as armazenará. Para cada sessão, um ID exclusivo chamado ID da sessão é criado, por padrão, o ID da sessão será fornecido ao cliente por meio do Navegador.
  3. O navegador enviará esse ID de sessão em cada solicitação subseqüente, a ID da sessão será verificada no banco de dados, com base nesse site de identificação de sessão identificará a sessão pertencente a qual cliente e, em seguida, dará acesso à solicitação.

  4. Depois que um usuário efetua logout do aplicativo, a sessão é destruída, tanto do lado do cliente quanto do servidor.

Debendra Dash
fonte