Mejores prácticas para API relativamente simples para nuestros clientes

4

He estado leyendo mucho sobre muchas consideraciones de seguridad de API, las diferencias en terminología, OAUTH, OpenID, etc. Aunque entiendo su absoluta necesidad cuando se trata de asegurar una API correctamente, me enfrento a mi (quizás ingenuo ) Visión de cómo podrían ser las cosas. Esperaba que pudieras decirme qué tan equivocado o correcto estoy y señalarme la dirección correcta. Eso sin duda sería apreciado.

Entonces, ¿qué se me pidió hacer exactamente? - La empresa para la que trabajo, llamada Compañía X, tiene muchos datos almacenados internamente . Ahora finalmente tenemos un db de PostgreSQL externo en su lugar y un servidor web que utiliza Amazon EC2. Esto funciona muy bien. Ahora, uso Slim Framework para crear rutas, manejar solicitudes GET / POST / PUT / DELETE, enviar consultas usando PDO y así sucesivamente. Ahora he llegado al punto en que la Compañía X me pregunta cómo sus clientes podrán comunicarse con la API. Ahora, por supuesto, no entregaría el acceso de concesión a todos, por lo que inicialmente pensé en una clave API por cliente. He usado Instagram y otras API similares y parecen funcionar de una manera similar. Sin embargo, también estoy leyendo que "las claves API no son suficientes". Puedo entender por qué este método puede ser demasiado simplista para un tema delicado de intercambio de información, pero no sé si las otras opciones son demasiado complejas para los objetivos a los que me enfrento.

De nuevo, para que quede claro, lo que me gustaría lograr es la siguiente tarea: quiero que los usuarios obtengan (digamos) notas de nuestro servidor, quiero que puedan enviar notas, las actualicen y las eliminen también.

Mi pregunta es cómo puedo hacer esto de manera segura , sin tener que sumergirme en docenas de documentación de protocolo. Por supuesto, si ese es el camino a seguir, entonces está bien, pero estoy seguro de que podría haber otras formas que puedan resultar igual de seguras.

Gracias por leer y especialmente si decides ayudarme o al menos dime qué tan lejos estoy de pensar con el estado de ánimo adecuado. :-)

    
pregunta digifrog 21.04.2016 - 17:22
fuente

1 respuesta

2

Editar: Aclarado según el caso de uso

Primero que nada, ningún sistema es perfecto. La ingeniería es el arte de hacer las mejores compensaciones.

Para las API de backend-to-back (por ejemplo, la aplicación de servidor y el servicio de API de terceros): las claves de API son realmente buenas. La mayoría de los problemas con las claves de la API provienen de los desarrolladores que descuidan cómo los almacenan (en código = > confirmar con repositorios públicos de github, etc.). Las claves API son

  1. cadenas de alta entropía
  2. puede ser revocado al instante
  3. no caduque automáticamente (ideal para automatización de máquina, es decir, API)

Muchas empresas de seguridad como Amazon (proveedor de nube), Stripe (pagos) o Crypteron (seguridad de datos como servicio) utiliza claves API. Si eres el creador de API, absolutamente debes diseñar

  • una gestión adecuada del ciclo de vida de la clave API (los desarrolladores clientes pueden actualizar las claves API sin mucha intervención) y
  • debe aplicar estrictamente TLS.

Como consumidor de claves de API, lo ideal es que desees claves de API separadas para desarrollo frente a producción, por lo que tu equipo de desarrollo no ve datos de producción. Básicamente tenemos recursos / instancias de desarrollo frente a recursos / instancias de producción

Las cosas cambian para el usuario final a las comunicaciones de back-end es decir, la aplicación de teléfono móvil = > su aplicación de servidor En este caso, usted realmente no quiere usar claves de API porque está autentificando técnicamente a los usuarios finales, no una API en sí misma. Si usa una clave de API estática, cualquiera puede desensamblar el binario de la aplicación móvil y buscar la clave de API. No sabrá cuándo lo que ocurre, pero incluso si lo supiera, al instante debe actualizar a todos los clientes con una nueva clave API, y está de vuelta en el punto 1.

Básicamente, nunca use claves API en aplicaciones cliente como aplicaciones móviles o aplicaciones de navegador. Siempre . Es tan malo como que los clientes se conecten directamente a su base de datos en lugar de tener un servidor web / de aplicaciones en el medio.

Está mejor con credenciales almacenadas en caché + autenticación básica + TLS para un sistema de dos partes (usuario, su servicio). Si uno está utilizando una tercera parte para verificar la identidad (por ejemplo, Facebook), OAuth es otra opción para organizar entre las tres partes (usuario, Facebook, su servicio). En función de su inquietud, supongo que sus clientes finales (móviles o navegadores) se conectarán directamente a los puntos finales REST de Slim Framework. Slim Framework parece admitir la autenticación básica, de modo que más TLS debería ser un buen punto de partida. Si tiene inquietudes específicas, aclárelas en la pregunta.

Divulgación: trabajo para Crypteron . ¡Visítanos!

    
respondido por el DeepSpace101 21.04.2016 - 17:35
fuente

Lea otras preguntas en las etiquetas