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:
-
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:
-
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.
-
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.