Confundido sobre la forma más relevante de proteger mis API

1

Soy dueño de una aplicación de Javascript (aplicación de una sola página) que golpea algunas API de mi propio backend RESTful.

Lo que espero de mi mecanismo de autenticación / (autorización) es tres cosas:

  • Prevención de todas las formas maliciosas conocidas de robo o acción sobre los datos del usuario: CSRF, XSS, etc.
  • Permitiendo que solo mi cliente oficial de Javascript llegue a API protegida de mi backend.
  • Encriptando todos los mensajes intercambiados.

No soy experto en seguridad, pero leí algunos buenos artículos sobre una guía a seguir:

  • Evite una forma de autenticación SOLO basada en el mecanismo de cookies, ya que este artículo explica bien.
  • HTTPS no es suficiente, pero realmente es un consejo para asegurar al menos el cifrado de mensajes.
  • Considere el cliente Javascript como totalmente inseguro, ya que su código es visible para cualquiera.

Por supuesto, estoy de acuerdo con esos principios, pero ... estoy confundido acerca de la cantidad de formas similares para lograr un buen mecanismo de autenticación:

  • ¿Cuál es la diferencia entre el artículo que puse en el enlace justo arriba y el flujo de credenciales de contraseña del propietario del recurso OAuth 2.0?
    De hecho, ambos usan esos pasos: intercambiar el nombre de usuario y la contraseña para un token de acceso que se envía a lo largo de la navegación del usuario mediante el encabezado de autorización HTTP. ¿Qué aspecto de seguridad adicional aporta este flujo de trabajo de OAuth 2.0 en comparación con la solución de token basada en cookies?

  • ¿La solución del token basado en cookies como se presenta en el artículo es realmente suficiente para proteger mi infraestructura? Como afirma el autor ...

  • Encontré this otra gran solución, que también juzgo similar a otros, excepto que no necesita https ya que se basa en una clave secreta compartida: mecanismo HMAC.

¿Qué me recomendaría un experto en seguridad? No intercambio datos realmente confidenciales como cuentas de dinero, etc., pero suficientes datos para molestar a los usuarios si sucede algo inesperado ...

Me encantaría ser más claro (en los comentarios), pero espero que lo sea.

Me encontré con muchos foros, artículos, videos, etc ... pero todavía estoy confundido acerca de las diferentes maneras de lograrlo.

Gracias

    
pregunta Mik378 17.04.2014 - 17:32
fuente

1 respuesta

2

La diferencia es: OAuth 2.0 es un protocolo estandarizado, y hay muchas implementaciones en diferentes idiomas (JAVA , Python, PHP, JavaScript ... etc) para los lados del cliente y del servidor. Por lo tanto, no necesita seguir este artículo para implementar algo que "parece" similar al protocolo OAuth 2.0 y probablemente no esté protegido.

Para la solución de token basada en cookies: un atacante puede seguir siendo una cookie de un usuario registrado (autorizado).

Por lo tanto, creo que la mejor solución es usar el protocolo OAuth 2.0 que ya utilizan muchas empresas (facebook, twitter) para sus API

    
respondido por el TMR_OS 18.04.2014 - 13:13
fuente

Lea otras preguntas en las etiquetas