Autenticación y seguridad de una API REST

3

Escenario: Diseño una API REST donde los usuarios autenticados pueden acceder a la API a través de TLS. Tengo que usar TLS ya que los datos transmitidos a través del cable son confidenciales. No necesito autorización en este momento, pero no quiero excluir la posibilidad. Quiero usar algún tipo de método de clave API (/ Secreto). Preferiría evitar el uso de OAuth. Tengo dos soluciones posibles. En ambos casos, la clave de API (y el secreto) será generada por nosotros.

I. Clave API simple

Incluir una clave API en el encabezado HTTP, puedo autenticar al cliente según ese encabezado. La clave API es segura, debido a TLS. Los ataques de repetición no son posibles, garantizados también por TLS. Muy simple de implementar por nuestros clientes. Por lo que entiendo de TLS, la solicitud no puede ser manipulada (MAC). Todas las medidas de seguridad son proporcionadas por TLS. El cliente solo agrega el encabezado HTTP de la clave API.

II. Firma HMAC con un secreto API

La solicitud debe incluir una firma, con el secreto, la marca de tiempo y el hash de la carga útil de la solicitud. Ahora no se puede manipular ni reproducir y el secreto ni siquiera se transmite por el cable. Más seguro, pero difícil de implementar en el lado del cliente. (escribir bibliotecas de clientes no es una opción)

¿La primera solución representa una amenaza y proporciona suficiente seguridad a mis clientes (y a nuestra API), o debería usar la segunda más complicada? Además, ¿cuáles son las deficiencias de la primera?

    
pregunta gmate 05.01.2015 - 19:11
fuente

1 respuesta

3

Si ya estás usando TLS, me inclino por usar una clave API secreta en el encabezado. Con una clave API puede almacenar ese cifrado que lo protege en caso de incumplimiento. Asegúrese de que su aplicación y su servidor no estén registrando la clave secreta de ninguna forma y yo presionaría a su cliente para que use claves largas y complejas. Estos serán manejados por sistemas, no por personas, por lo que no debería haber acidez estomacal al hacer que presenten una clave larga y complicada con cada solicitud.

Las firmas hmac son útiles si desea utilizar un canal sin cifrar y aceptar un poco o riesgo. En este caso, el HMAC no proporciona ningún beneficio y le exigirá que almacene el secreto en texto sin formato. En este caso, consideraría que una clave secreta es más segura que una firma.

En cuanto al rendimiento, serán similares.

Otra nota: ya que eres TLS, debes asegurarte de que los documentos de ejemplo y los procedimientos dejen en claro cómo establecer esa conexión y alarmar correctamente los certificados y el SDK de tu cliente debería hacerlo por defecto.

    
respondido por el u2702 05.01.2015 - 19:41
fuente

Lea otras preguntas en las etiquetas