¿Cómo funciona la autenticación basada en cookies?

210

¿Alguien puede darme una descripción paso a paso de cómo funciona la autenticación basada en cookies? Nunca he hecho nada relacionado con autenticación o cookies. ¿Qué necesita hacer el navegador? ¿Qué necesita hacer el servidor? ¿En qué orden? ¿Cómo mantenemos las cosas seguras?

He estado leyendo sobre diferentes tipos de autenticación y sobre cookies, pero me gustaría una descripción básica de cómo usar los dos juntos. Solo he leído que a menudo se usan juntos, pero no pude encontrar una descripción de cómo hacerlo.

Mastid
fuente
3
howstuffworks.com/cookie.htm
Cyclonecode del

Respuestas:

162

Una cookie es básicamente solo un elemento en un diccionario. Cada artículo tiene una clave y un valor. Para la autenticación, la clave podría ser algo así como 'nombre de usuario' y el valor sería el nombre de usuario. Cada vez que realiza una solicitud a un sitio web, su navegador incluirá las cookies en la solicitud y el servidor host las comprobará. Entonces, la autenticación se puede hacer automáticamente de esa manera.

Para configurar una cookie, solo tiene que agregarla a la respuesta que el servidor envía después de las solicitudes. El navegador luego agregará la cookie al recibir la respuesta.

Hay diferentes opciones que puede configurar para el lado del servidor de cookies, como los tiempos de caducidad o el cifrado. Una cookie encriptada a menudo se denomina cookie firmada. Básicamente, el servidor cifra la clave y el valor en el elemento del diccionario, por lo que solo el servidor puede hacer uso de la información. Entonces la cookie estaría segura.

Un navegador guardará las cookies establecidas por el servidor. En el encabezado HTTP de cada solicitud que el navegador realiza a ese servidor, agregará las cookies. Solo agregará cookies para los dominios que las establecieron. Example.com puede configurar una cookie y también agregar opciones en el encabezado HTTP para que los navegadores envíen la cookie a subdominios, como sub.ejemplo.com. Sería inaceptable que un navegador envíe cookies a un dominio diferente.

Conor Patrick
fuente
Lo que entiendo es que el navegador puede enviar la cookie al mismo dominio. En relación con eso, ¿el navegador tiene en cuenta el subdominio al diferenciar entre dos dominios?
Aakash
1
Puede establecer opciones en el encabezado HTTP para ver cómo un navegador maneja los subdominios.
Conor Patrick
288

Me doy cuenta de que esto lleva años de retraso, pero pensé que podría ampliar la respuesta de Conor y agregar un poco más a la discusión.

¿Alguien puede darme una descripción paso a paso de cómo funciona la autenticación basada en cookies? Nunca he hecho nada relacionado con autenticación o cookies. ¿Qué necesita hacer el navegador? ¿Qué necesita hacer el servidor? ¿En qué orden? ¿Cómo mantenemos las cosas seguras?

Paso 1: Cliente> Registrarse

Antes que nada, el usuario tiene que registrarse. El cliente publica una solicitud HTTP en el servidor que contiene su nombre de usuario y contraseña.

Paso 2: Servidor> Manejo de registro

El servidor recibe esta solicitud y codifica la contraseña antes de almacenar el nombre de usuario y la contraseña en su base de datos. De esta manera, si alguien obtiene acceso a su base de datos, no verá las contraseñas reales de sus usuarios.

Paso 3: Cliente> Inicio de sesión de usuario

Ahora su usuario inicia sesión. Él / ella proporciona su nombre de usuario / contraseña y nuevamente, esto se publica como una solicitud HTTP al servidor.

Paso 4: Servidor> Validar inicio de sesión

El servidor busca el nombre de usuario en la base de datos, codifica la contraseña de inicio de sesión proporcionada y la compara con la contraseña codificada previamente en la base de datos. Si no se cancela, podemos negarles el acceso enviando un código de estado 401 y finalizando la solicitud .

Paso 5: Servidor> Generando token de acceso

Si todo funciona, crearemos un token de acceso, que identifica de forma exclusiva la sesión del usuario. Aún en el servidor, hacemos dos cosas con el token de acceso:

  1. Almacénelo en la base de datos asociada con ese usuario
  2. Adjúntelo a una cookie de respuesta que se devolverá al cliente. Asegúrese de establecer una fecha / hora de vencimiento para limitar la sesión del usuario

En adelante, las cookies se adjuntarán a cada solicitud (y respuesta) realizada entre el cliente y el servidor.

Paso 6: Cliente> Hacer solicitudes de página

De vuelta en el lado del cliente, ahora hemos iniciado sesión. Cada vez que el cliente solicita una página que requiere autorización (es decir, necesita iniciar sesión), el servidor obtiene el token de acceso de la cookie y lo compara con el en la base de datos asociada con ese usuario. Si se retira, se otorga acceso.

Esto debería ayudarte a comenzar. ¡Asegúrese de borrar las cookies al cerrar sesión!

pllx
fuente
10
Gracias por la descripcion. Me pregunto cómo el token de acceso proporciona seguridad. ¿Puede un atacante si roba la cookie, hacerse pasar por un usuario autenticado conectado? ¿O eso está protegido por SSL?
Richeek
66
@Richeek SSL asegura la intercepción durante las solicitudes / respuestas, pero un atacante podría acceder a sus cookies en los puntos finales (por ejemplo, su navegador). Teóricamente, podrían hacerse pasar por un usuario conectado hasta que la cookie caduque. Digo "teóricamente" porque la implementación anterior no maneja eso. En la implementación anterior, el atacante tendrá acceso hasta que se actualice el token de acceso en su base de datos (es decir, el próximo inicio de sesión).
pllx
14
Puede invalidar el token de acceso al vencimiento usted mismo, tal vez con una "fecha de vencimiento" en su base de datos. O bien, podría considerar usar JSON Web Tokens (JWT) , que son como tokens de acceso, pero pueden manejar la expiración de tokens, entre otras cosas. Más sobre JWT aquí. Un atacante aún tendrá acceso a su cuenta durante breves períodos de tiempo si tiene su token de acceso / JWT, por lo que también debe proteger sus puntos finales.
pllx
3
Me tomó mucho tiempo decir gracias! Gracias por su
explicación
44
@ManuChadha, junto con la clave de token / sesión, también puede guardar la dirección IP del usuario junto con otros parámetros de identificación, como el agente de usuario, etc. rechazar la solicitud y redirigir al usuario a la página de inicio de sesión para autenticarse nuevamente.
FalcoGer
18

Autenticación basada en cookies

La autenticación basada en cookies funciona normalmente en estos 4 pasos:

  1. El usuario proporciona un nombre de usuario y contraseña en el formulario de inicio de sesión y hace clic en Iniciar sesión.
  2. Una vez realizada la solicitud, el servidor valida al usuario en el backend consultando en la base de datos. Si la solicitud es válida, creará una sesión utilizando la información del usuario obtenida de la base de datos y la almacenará, para cada sesión se crea un identificador único llamado Id. De sesión; de manera predeterminada, el identificador de sesión se le dará al cliente a través del navegador.
  3. El navegador enviará este ID de sesión en cada solicitud subsiguiente, el ID de sesión se verificará en la base de datos, en función del sitio web de ID de sesión identificará la sesión que pertenece a qué cliente y luego dará acceso a la solicitud.

  4. Una vez que un usuario cierra sesión en la aplicación, la sesión se destruye tanto del lado del cliente como del lado del servidor.

Debendra Dash
fuente