Bob usa una aplicación web para lograr algo. Y:
- Su navegador está a dieta, por lo que no admite cookies .
- La aplicación web es muy popular, trata con muchos usuarios en un momento dado, tiene que escalar bien. Siempre que mantener la sesión imponga un límite al número de conexiones simultáneas y, por supuesto, traerá una penalización de rendimiento no despreciable , nos gustaría tener un sistema sin sesión :)
Algunas notas importantes:
- tenemos seguridad en el transporte ( HTTPS y sus mejores amigos);
- detrás de las cortinas, la aplicación web delega muchas operaciones a servicios externos , en nombre del usuario actual (esos sistemas reconocen a Bob como uno de sus usuarios); esto significa que tenemos que enviarles las credenciales de Bob .
Ahora, ¿cómo autenticamos a Bob (en todas y cada una de las solicitudes)? ¿Cuál sería una forma razonable de implementar tal cosa?
- jugar al tenis con las credenciales a través de campos ocultos de formulario HTML ... la pelota contiene las credenciales ( nombre de usuario y contraseña ) y las dos raquetas son el navegador y la aplicación web respectivamente. En otras palabras, podemos transportar datos de un lado a otro a través de campos de formulario en lugar de mediante cookies. En cada solicitud web, el navegador publica las credenciales. Sin embargo, en el caso de una aplicación de una sola página , esto puede parecer como jugar al squash contra una pared de goma, en lugar de jugar al tenis , ya que el formulario web que contiene las credenciales podría mantenerse activo durante toda la vida útil de la página web. (y el servidor se configurará para no devolver las credenciales).
- almacenar el nombre de usuario y la contraseña en el contexto de la página - variables de JavaScript, etc. Se requiere una sola página aquí, en mi humilde opinión.
- autenticación basada en token cifrada. En este caso, la acción de inicio de sesión daría como resultado la generación de un token de seguridad cifrado (nombre de usuario + contraseña + algo más). Este token se devolverá al cliente y las próximas solicitudes irán acompañadas del token. ¿Esto tiene sentido? Ya tenemos HTTPS ...
- otros...
- último recurso: no haga esto, almacene las credenciales en la sesión. La sesión es buena. Con o sin cookies.
¿Le viene a la mente alguna inquietud de seguridad / web con respecto a alguna de las ideas descritas anteriormente? Por ejemplo,
- tiempo de espera : podemos mantener una marca de tiempo , junto con las credenciales (marca de tiempo = la hora en que Bob ingresó sus credenciales). Por ejemplo, cuando NOW - marca de tiempo> umbral , podríamos denegar la solicitud.
- Protección de secuencias de comandos entre sitios : no debería ser diferente de ninguna manera, ¿verdad?
Muchas gracias por tomarse el tiempo de leer esto :)