Para que una API sea una poderosa extensión de un producto, en la mayoría de los casos se necesita algún
sistema de autentificación. Con una API que pueda leer, escribir y borrar datos de los usuarios podemos
incrementar el impacto que tiene una aplicación en dichos usuarios.
En este artículo compararemos tres tipos de autentificación populares: API keys, OAuth Tokens y JWT (JSON Web
Tokens).
API Keys
Las de toda la vida. Seguramente siga siendo el identificador más común, y es la primera opción que suele
considerar. Su punto fuerte es su simplicidad. Simplemente nos logeamos al servicio, obtenemos la key, y
la podemos copiar en el navegador, Swagger, Postman, etc.
Sin embargo, su simplicidad suele venir acompañada por su escasa seguridad. Muchas veces nos
encontramos que la key se está enviando al servidor como un string en la query de la url, en el body de la
request, etc, malas prácticas que facilitan el acceso no autorizado a terceros. También vale la pena
comentar que están enfocada a desarrolladores, por lo que resulta confuso para la mayoría de usuarios
acceder a éstas sin dar un montón de vueltas.
OAuth Tokens
OAuth es la respuesta si nuestra API se centra en acceder a información de los usuarios. Al contrario que
con las API keys, OAuth no requiere que el usuario realice muchos pasos. La mayoría del tiempo con
simplemente darle a a un botón de dar permisos a la aplicación es suficiente. Las implementaciones más
comunes utilizan un access token y/o un refresh token, que permite configurar el tiempo que el token será
valido.
Como las API keys, cualquiera que tenga el access token podría potencialmente realizar acciones
peligrosas. Sin embargo, OAuth implementa diferentes mejoras con respecto a las API keys. En primer
lugar, los access token pueden estar limitados a sólo una pequeña parte de todas las operaciones
disponibles que la aplicación ofrece. Además, combinados con el refresh token, podemos garantizar que
el token en cuestión sólo será válido durante un tiempo. No obstante, incluso si no usamos refresh token,
se puede igualmente cambiar la validez de un access token.
JSON Web Tokens (JWT)
Mientras que las API keys y los OAuth tokens siempre se usan para acceder a APIs, los JWT se pueden
usar en muchos escenarios distintos. Además, con estos últimos se necesitan muchos menos accesos a
bases de datos sin reducir la seguridad.
La clave que permite evitar accesos a BD con los JWT es que éstos contienen la información que tenemos
que determinar codificada en base64. También tienen la firma que los valida. De esta manera usando el
mismo secreto que se utilizó para generar el token, podemos generar nuestra versión de la firma y
comprobar si son iguales. Esta manera es mucho más eficiente que acceder a la base de datos y
comprobar quién es quién dice ser y si tiene permisos para realizar la acción.
El inconveniente de los JWT es que por defecto no se puede denegar o cambiar la validez de un token una
vez se ha creado. Por esta razón es importante combinar JWT con un refresh token. En cada llamada a la
API solo tendríamos que mirar si la firma es válida y la fecha de caducidad del token sigue siendo en el futuro.
Autor: David Agut