Cookie + CSRF Token vs OAuth Token para aplicaciones móviles nativas

2

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é?

    
pregunta SB2055 15.10.2016 - 18:01
fuente

1 respuesta

3

Claro, ¿por qué no sería? Acaba de perder (mucha) la flexibilidad que se incluye en los muchos casos de uso de OAuth, que supongo que no necesita. En particular, si solo se preocupa por su propia aplicación y no por delegar el acceso a otros y / o permitir que los usuarios inicien sesión con otros proveedores de identidad, entonces está bien con esta configuración. Dicho esto, si va a actualizar en el futuro, actualice a OpenID Connect, en lugar de 'OAuth puro'.

Un par de comentarios:

  • Es probable que necesite almacenar el token de autenticación (que normalmente incluye en una cookie) en algún almacenamiento local del dispositivo, ya que las cookies no existen en las aplicaciones nativas . Por lo tanto, es posible que necesite algún tipo de 'traductor' en su aplicación que atrape el comando 'set-cookie' y almacene su valor en el almacenamiento local del dispositivo. Del mismo modo para el revés.
  • Los ataques CSRF no existen en aplicaciones reales nativas . Sin embargo, si utiliza los mismos puntos finales tanto para el navegador como para la aplicación, es probable que deba seguir usándolos.
  • Use HTTPS (y posiblemente HSTS y HPKP) para asegurar sus tokens durante el transporte.
respondido por el Michael 18.10.2016 - 09:53
fuente

Lea otras preguntas en las etiquetas