Autentica las llamadas a tus API de forma segura

En la actualidad puedes utilizar tres métodos para autenticar tus APIs: (1) HTTP Basic sobre SSL, (2) autenticación basada en token y (3) utilizar el protocolo estándar OAuth. Pero, ¿cuál escoger? ¿Y por qué?

Llave segura

1. Basic HTTP Auth con SSL/TLS

La autenticación básica HTTP sobre SSL es la forma más antigua (año 1996, también es la menos segura) para asegurar tu API. Con este sistema, el agente de usuario siempre envía sus credenciales encriptadas en base64 en sus llamadas API, concretamente en las cabeceras HTTP de sus peticiones, de acuerdo al siguiente esquema.

Figura 1. Basic HTTP sobre SSL (puedes pinchar en la imagen para verla mejor)

Por lo tanto, para esconder el login y el usuario encriptados de la vista de todo el mundo, Basic HTTP Auth se encripta con SSL, lo que ralentiza considerablemente la comunicación cliente-servidor. La ventaja que tiene HTTP Basic con SSL es que es sencillo: no hacen falta cookies, ni sesiones, ni páginas de login. La seguridad se delega pues exclusivamente en SSL/TLS.

Todo este funcionamiento está bien documentado en el RFC2617 del W3C, aunque siempre puedes echar un vistazo algo menos exhaustivo a la Wikipedia.

2. Autenticación basada en token

Hemos visto que el sistema anterior (1. Basic HTTP Auth sobre SSL) requiere que el agente de usuario pase sus credenciales en cada llamada y que (2) ralentiza la comunicación por culpa del SSL. Pues bien, la autenticación basada en token soluciona estos dos problemas mediante la generación de una pieza de información, el token, que representa al usuario autenticado.

Figura 2. Autenticación basada en token (puedes pinchar en la imagen para verla mejor)

Bajo este esquema, el agente de usuario envía sus credenciales al servidor por vez primera al principio de la comunicación, una sola vez. Luego el servidor genera un token de seguridad y se lo envía al agente de usuario. A continuación el agente de usuario ya puede adjuntar el token en cada una de sus llamadas API para que el servidor pueda reconocerlo.

3. OAuth

El sistema anterior (2. Autenticación basada en token) puede llegar a complicarse si el desarrollador tiene que implementarlo en su totalidad. En ese caso, deberá resolver todos los nuts and bolts implicados en este proceso, o bien apoyarse an algún esquema estándar. Si decides implementar la autenticación basada en token tendrás que resolver cuestiones del tipo: ¿cómo genero el token de autenticación?, ¿cuándo caduca el token?, ¿cómo paso el token en la comunicación?, ¿utilizo cookies o no?, etc.

Por todo ello, en muchos escenarios lo más fácil es utilizar OAuth. OAuth es un protocolo abierto que permite la autorización API segura sin necesidad de que el usuario proporcione sus credenciales a un tercero. En el próximo artículo hablaremos en más detalle sobre este sistema a través de un ejemplo práctico. ¡No te lo pierdas!