Administración de sesiones de una sola página

2

Tengo una aplicación de una sola página que es totalmente HTML + JS + CSS (que usa marcos como jQuery y AngularJS) y una API del lado del servidor que usa ASP.NET WebApi.

El SPA se sirve en un servidor similar a un CDN y también se empaqueta con Cordova para su uso en teléfonos inteligentes.

La API del lado del servidor tiene muchos métodos que requieren autorización y autenticación, por lo tanto, tengo que iniciar sesión y pasar un identificador del lado del cliente para que el servidor sepa quién soy.

Los problemas a los que me enfrento:

  1. Una vez autenticado, ¿dónde debo almacenar el token de acceso \ ID de sesión?

    actualmente he creado mi propio método de autenticación (no OAuth) que devuelve un ID de sesión, que el cliente coloca en todas las llamadas HTTP posteriores en el encabezado de Autorización. Sin embargo, cuando un usuario decide actualizar la página, el encabezado desaparece. Las soluciones son guardar el ID de sesión en un SessionStorage que podría ser inseguro (OWASP no lo recomienda, pero quizás X-Frame-Options = ¿SAMEORIGIN sería suficiente?) O usar una cookie HttpOnly para la administración de la sesión, lo que me trae al siguiente punto:

  2. Si estoy usando Cookies, se entiende que debo verificar si hay CSRF, pero si no lo estoy? ¿Hay alguna razón para agregar un CSRF? está en el mismo ámbito para el ID de sesión.

  3. Tengo mi propio sistema de usuario y administración de grupos que tiene un control de acceso sólido. ¿Hay alguna ventaja para mí de usar OAuth y OpenID si ya tengo un filtro de autorización en funcionamiento que verifica lo que necesito y no está basado en cadenas de roles? (es decir, roles="Administradores", etc., pero completamente CanChangeResource (x))

No he podido encontrar preguntas similares que puedan responder a mis problemas y agradecería una respuesta informativa.

    
pregunta Albert 09.01.2016 - 16:18
fuente

1 respuesta

2

En cuanto a las dos opciones que presentó, las cookies de SessionStorage o HttpOnly, existe una compensación. Usted tiene razón en que si usa cookies, necesita un token CSRF, y si usa sessionStorage y lo usa como fuente para su encabezado, no lo hace.

Sin embargo, lo que le preocupa a OWASP con sessionStorage, es que una vulnerabilidad XSS permite que un ataque extraiga sesiones autenticadas. Con una cookie HttpOnly, no lo hace. Dada la prevalencia de XSS en la web hoy en día, esta es una amenaza a considerar seriamente.

Entonces, si bien sessionStorage sería la opción más simple y podría funcionar con poca modificación del código que tiene actualmente, la cookie HttpOnly más un token anti-CSRF sería el enfoque más seguro. Usted tiene que decidir si el esfuerzo adicional lo vale para usted, para su aplicación.

    
respondido por el Xander 09.01.2016 - 21:56
fuente

Lea otras preguntas en las etiquetas