Tenemos una aplicación web de una sola página que funciona con puntos finales ASP.NET WebApi. Estos puntos finales aprovechan la autenticación de formularios y autenticación simple para manejar la autorización y la autenticación:
[System.Web.Http.HttpPost]
[Route("api/login")]
[System.Web.Http.AllowAnonymous]
public HttpResponseMessage LogIn(LoginModel model) {
if (!WebSecurity.UserExists(model.Username))
return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Success = false, Error = "Email or Password is incorrect." });
if (_userService.LoginWork(model.Username) && WebSecurity.Login(model.Username, model.Password, persistCookie: true)) {
return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Data = true });
}
LogOut();
return Request.CreateResponse(HttpStatusCode.OK, new ApiResponseDto() { Success = false, Error = "Login Failed" });
}
Ahora estamos desarrollando una aplicación iOS nativa y nos gustaría reutilizar estos puntos finales de API en nombre de la simplicidad. Para hacer esto, estamos usando tokens CSRF así como las cookies para manejar la autenticación de aplicaciones tanto nativas como web.
Me gusta la idea de mantener las cosas simples y no reescribir ~ 100 puntos finales de API solo para admitir dispositivos móviles, pero no si tengo que comprometerme con la seguridad. ¿Es esta solución "tan segura" como la implementación estándar de, por ejemplo, una implementación basada en token OAuth2 pura? Si no, ¿por qué?