security - practices - Teclas API frente a Autenticación HTTP frente a OAuth en una API RESTful
rest api authorization best practices (1)
Depende de tus necesidades. Necesitas:
- Identidad: ¿quién dice que está haciendo una solicitud de API?
- Autenticación: ¿son realmente quienes dicen ser?
- Autorización: ¿pueden hacer lo que intentan hacer?
o los tres?
Si solo necesita identificar a la persona que llama para realizar un seguimiento del volumen o número de llamadas a la API, use una clave API simple. Tenga en cuenta que si el usuario que ha emitido la clave API lo comparte con otra persona, también podrán llamar a su API.
Pero, si también necesita Autorización, es necesario que proporcione acceso solo a ciertos recursos según la persona que llama de la API, luego use oAuth.
Aquí hay una buena descripción: http://www.srimax.com/index.php/do-you-need-api-keys-api-identity-vs-authorization/
Estoy trabajando en la construcción de una API RESTful para una de las aplicaciones que mantengo. Actualmente estamos buscando construir varias cosas que requieran un acceso y seguridad más controlados. Mientras investigaba cómo proteger la API, encontré algunas opiniones diferentes sobre qué forma utilizar. He visto algunos recursos que dicen que HTTP-Auth es el camino a seguir, mientras que otros prefieren las claves de API, e incluso otros (incluidas las preguntas que encontré aquí en SO) juran por OAuth.
Entonces, por supuesto, los que prefieren, por ejemplo, las claves API, dicen que OAuth está diseñado para aplicaciones que obtienen acceso en nombre de un usuario (según entiendo, como iniciar sesión en un sitio que no es Facebook usando su cuenta de Facebook), y no para que un usuario acceda directamente a los recursos en un sitio para el que se haya registrado específicamente (como el cliente oficial de Twitter que accede a los servidores de Twitter). Sin embargo, las recomendaciones para OAuth parecen ser incluso para las necesidades de autenticación más básicas.
Mi pregunta, entonces, es - suponiendo que todo se haga a través de HTTPS, ¿cuáles son algunas de las diferencias prácticas entre los tres? ¿Cuándo se debe considerar uno sobre los demás?