{"id":11814,"date":"2024-04-03T22:47:32","date_gmt":"2024-04-03T20:47:32","guid":{"rendered":"https:\/\/www.palentino.es\/blog\/?p=11814"},"modified":"2024-04-03T22:52:26","modified_gmt":"2024-04-03T20:52:26","slug":"mecanismos-de-autenticacion-para-apis-desde-clasicos-hasta-los-mas-modernos","status":"publish","type":"post","link":"https:\/\/www.palentino.es\/blog\/mecanismos-de-autenticacion-para-apis-desde-clasicos-hasta-los-mas-modernos\/","title":{"rendered":"Mecanismos de autenticaci\u00f3n para APIs: Desde cl\u00e1sicos hasta los m\u00e1s modernos"},"content":{"rendered":"<p>La autenticaci\u00f3n en las <strong>APIs<\/strong> es fundamental para garantizar la <strong>seguridad y la integridad<\/strong> tanto de los datos como de las funcionalidades expuestas por los servicios web. Act\u00faa como un portero que verifica la identidad de los usuarios o sistemas antes de permitirles acceder a ciertos recursos. Este proceso es esencial no solo para proteger la informaci\u00f3n sensible de accesos no autorizados sino tambi\u00e9n para asegurar que cada usuario tenga un nivel de acceso adecuado a los recursos disponibles, basado en sus permisos.<\/p>\n<p>A lo largo de los a\u00f1os, la evoluci\u00f3n tecnol\u00f3gica y los crecientes desaf\u00edos de seguridad han impulsado el desarrollo de una <strong>variedad de m\u00e9todos de autenticaci\u00f3n<\/strong>. Estos m\u00e9todos var\u00edan en complejidad, seguridad y facilidad de implementaci\u00f3n, adapt\u00e1ndose a diferentes necesidades y contextos de uso. Desde soluciones b\u00e1sicas hasta avanzadas, la elecci\u00f3n del m\u00e9todo adecuado depende de varios factores, incluyendo el nivel de seguridad requerido, la naturaleza de los datos manejados, y la infraestructura tecnol\u00f3gica existente.<\/p>\n<p>Inicialmente, m\u00e9todos simples como la autenticaci\u00f3n b\u00e1sica (donde los usuarios env\u00edan su nombre de usuario y contrase\u00f1a en cada solicitud) eran comunes. Sin embargo, estos m\u00e9todos presentan vulnerabilidades significativas, especialmente en lo que respecta a la exposici\u00f3n de credenciales en texto claro.<\/p>\n<p>Con el tiempo, surgieron t\u00e9cnicas m\u00e1s sofisticadas y seguras como OAuth, que proporciona un marco robusto para la autorizaci\u00f3n a trav\u00e9s de tokens de acceso. Esta evoluci\u00f3n refleja un esfuerzo constante por equilibrar la usabilidad y la seguridad, permitiendo a las aplicaciones acceder a recursos espec\u00edficos en nombre de un usuario sin necesidad de manejar directamente sus credenciales de acceso.<\/p>\n<p>Adem\u00e1s, la aparici\u00f3n de est\u00e1ndares como JWT (JSON Web Tokens) ha permitido m\u00e9todos de autenticaci\u00f3n stateless, donde la informaci\u00f3n necesaria para validar la solicitud se almacena dentro del token mismo, reduciendo la necesidad de consultas constantes a la base de datos para verificar el estado de la sesi\u00f3n del usuario.<\/p>\n<p>La elecci\u00f3n del mecanismo de autenticaci\u00f3n adecuado es crucial para la arquitectura de cualquier sistema basado en APIs. Debe considerar no solo los requisitos de seguridad y la naturaleza de los datos protegidos sino tambi\u00e9n el impacto en la experiencia del usuario final y los costos de implementaci\u00f3n y mantenimiento asociados.<\/p>\n<p>La autenticaci\u00f3n en las APIs es una pieza indispensable del ecosistema de seguridad en la era digital. Su continua evoluci\u00f3n refleja el dinamismo del campo de la seguridad cibern\u00e9tica y la necesidad constante de adaptaci\u00f3n frente a las amenazas emergentes y las cambiantes expectativas de los usuarios.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/mecanismos.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11827\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/mecanismos.png\" alt=\"\" width=\"1128\" height=\"759\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/mecanismos.png 1128w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/mecanismos-300x202.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/mecanismos-1024x689.png 1024w\" sizes=\"auto, (max-width: 1128px) 100vw, 1128px\" \/><\/a><\/p>\n<p><!--more--><\/p>\n<p>&nbsp;<\/p>\n<p style=\"text-align: center;\"><a href=\"https:\/\/insomnia.rest\/\" target=\"_blank\" rel=\"noopener\">https:\/\/insomnia.rest\/<\/a><\/p>\n<div id=\"attachment_11818\" style=\"width: 1276px\" class=\"wp-caption aligncenter\"><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion.png\"><img loading=\"lazy\" decoding=\"async\" aria-describedby=\"caption-attachment-11818\" class=\"wp-image-11818 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion.png\" alt=\"\" width=\"1266\" height=\"808\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion.png 1266w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-300x191.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-1024x654.png 1024w\" sizes=\"auto, (max-width: 1266px) 100vw, 1266px\" \/><\/a><p id=\"caption-attachment-11818\" class=\"wp-caption-text\">Pantalla del programa Insomnia<\/p><\/div>\n<h2>1. <strong>API Key Authentication<\/strong><\/h2>\n<p>La autenticaci\u00f3n mediante API Key es una de las formas m\u00e1s simples. Consiste en una clave secreta (la API Key) que se env\u00eda junto a la solicitud HTTP. Aunque es f\u00e1cil de implementar, su principal desventaja es la falta de flexibilidad, ya que no permite niveles de acceso diferenciados o una gesti\u00f3n detallada de permisos.<\/p>\n<h2>2. <strong>Basic Authentication<\/strong><\/h2>\n<p>La autenticaci\u00f3n b\u00e1sica es otra t\u00e9cnica sencilla donde el usuario y la contrase\u00f1a se codifican en base64 y se env\u00edan en el encabezado de autorizaci\u00f3n de cada solicitud HTTP. Aunque su implementaci\u00f3n es simple, la informaci\u00f3n de autenticaci\u00f3n se transmite en texto claro (codificado pero no cifrado), lo que puede representar un riesgo de seguridad si no se utiliza junto con HTTPS.<\/p>\n<h2>3. <strong>Digest Authentication<\/strong><\/h2>\n<p>A diferencia de la autenticaci\u00f3n b\u00e1sica, la autenticaci\u00f3n Digest no env\u00eda las credenciales en texto claro. En su lugar, utiliza un hash MD5 de las credenciales del usuario, el <strong>nonce<\/strong> del servidor y otros detalles de la sesi\u00f3n. Esto la hace m\u00e1s segura contra ataques de tipo &#8220;man in the middle&#8221; en comparaci\u00f3n con la autenticaci\u00f3n b\u00e1sica.<\/p>\n<p>La autenticaci\u00f3n Digest es un m\u00e9todo de autenticaci\u00f3n HTTP dise\u00f1ado para ofrecer una alternativa m\u00e1s segura a la autenticaci\u00f3n b\u00e1sica HTTP. A diferencia de la autenticaci\u00f3n b\u00e1sica, que env\u00eda nombres de usuario y contrase\u00f1as en texto claro (aunque codificado en Base64, lo cual es f\u00e1cilmente decodificable), la autenticaci\u00f3n Digest utiliza hashes para transmitir las credenciales de forma segura.<\/p>\n<p>El funcionamiento de la autenticaci\u00f3n Digest se basa en el uso de un valor hash MD5, el cual es un resumen criptogr\u00e1fico de varias piezas de informaci\u00f3n, incluyendo la contrase\u00f1a del usuario, un nonce (n\u00famero utilizado una sola vez) proporcionado por el servidor, el m\u00e9todo HTTP de la solicitud (por ejemplo, GET o POST), y la URL a la que se est\u00e1 accediendo.<\/p>\n<p>Aqu\u00ed te explico los pasos b\u00e1sicos del proceso de autenticaci\u00f3n Digest:<\/p>\n<ol>\n<li><strong>Inicio del Proceso<\/strong>: Cuando un cliente solicita un recurso protegido sin proporcionar credenciales de autenticaci\u00f3n, el servidor responde con un c\u00f3digo de estado HTTP 401 (No Autorizado), incluyendo un encabezado <strong>WWW-Authenticate<\/strong> que especifica el m\u00e9todo de autenticaci\u00f3n Digest y proporciona un nonce generado por el servidor.<\/li>\n<li><strong>Respuesta del Cliente<\/strong>: El cliente, al recibir este desaf\u00edo, calcula un hash MD5 utilizando su nombre de usuario, la contrase\u00f1a, el nonce proporcionado por el servidor, el m\u00e9todo de solicitud HTTP, y la URL del recurso solicitado. Este hash, junto con el nombre de usuario y el nonce, se env\u00eda de vuelta al servidor como parte de un encabezado <strong>Authorization\u00a0<\/strong>en una nueva solicitud al mismo recurso.<\/li>\n<li><strong>Verificaci\u00f3n del Servidor<\/strong>: El servidor, a su vez, realiza un c\u00e1lculo similar usando la contrase\u00f1a que tiene almacenada para el nombre de usuario proporcionado. Si el hash que el servidor calcula coincide con el hash recibido del cliente, la solicitud se considera autenticada y el servidor procede a responder la solicitud del recurso.<\/li>\n<li><strong>Reautenticaci\u00f3n<\/strong>: El nonce utilizado puede tener un tiempo de vida limitado, por lo que el servidor puede, despu\u00e9s de cierto tiempo o n\u00famero de solicitudes, enviar un nuevo nonce al cliente, pidiendo una reautenticaci\u00f3n.<\/li>\n<\/ol>\n<p>La autenticaci\u00f3n Digest mejora la seguridad en comparaci\u00f3n con la autenticaci\u00f3n b\u00e1sica, ya que las contrase\u00f1as nunca se transmiten en claro sobre la red. Sin embargo, todav\u00eda presenta vulnerabilidades frente a ataques como el de hombre en el medio (MITM) si no se utiliza en conjunto con una capa de seguridad como TLS\/SSL (a trav\u00e9s de HTTPS). Adem\u00e1s, como utiliza MD5, que ha sido criptogr\u00e1ficamente roto en t\u00e9rminos de encontrar colisiones, no se considera tan segura como otros m\u00e9todos de autenticaci\u00f3n m\u00e1s modernos, como los basados en tokens y OAuth.<\/p>\n<h2>4. <strong>OAuth 1.0<\/strong><\/h2>\n<p>OAuth 1.0 es un protocolo de autorizaci\u00f3n que permite a las aplicaciones autenticarse de manera segura mediante el uso de tokens en lugar de credenciales. Utiliza un enfoque de tres pasos para la autenticaci\u00f3n y firma cada solicitud, lo que proporciona una seguridad robusta. Sin embargo, su implementaci\u00f3n puede ser compleja debido al proceso de firma de solicitudes.<\/p>\n<h2>5. <strong>OAuth 2.0<\/strong><\/h2>\n<p>Como evoluci\u00f3n de OAuth 1.0, OAuth 2.0 simplifica el flujo de autorizaci\u00f3n y ofrece mayor flexibilidad con diversos tipos de concesiones para diferentes casos de uso. Aunque es menos seguro que OAuth 1.0 debido a la ausencia de firma de solicitudes, se ha convertido en el est\u00e1ndar de facto para la autenticaci\u00f3n en APIs modernas.<\/p>\n<p>De las 11 opciones de autenticaci\u00f3n mencionadas <strong>OAuth 2.0<\/strong> es actualmente el m\u00e9todo m\u00e1s utilizado, especialmente para aplicaciones web y m\u00f3viles modernas.<\/p>\n<p>La amplia adopci\u00f3n de OAuth 2.0 se debe a su flexibilidad y seguridad, as\u00ed como a su capacidad para permitir a los usuarios acceder a servicios y datos sin revelar sus credenciales de acceso directamente a la aplicaci\u00f3n de terceros.<\/p>\n<p>OAuth 2.0 es particularmente popular para casos de uso que requieren autorizaci\u00f3n de acceso a recursos de terceros sin compartir las credenciales del usuario. Por ejemplo, una aplicaci\u00f3n que accede a tus fotos en una plataforma de almacenamiento en la nube o una aplicaci\u00f3n que publica actualizaciones en una red social en tu nombre, utilizar\u00eda OAuth 2.0 para obtener el permiso necesario para realizar estas acciones sin necesidad de que ingreses tu contrase\u00f1a de la plataforma de destino en la aplicaci\u00f3n de terceros.<\/p>\n<p>La flexibilidad de OAuth 2.0 proviene de sus m\u00faltiples flujos de autorizaci\u00f3n (grant types), que pueden adaptarse a diferentes escenarios de aplicaci\u00f3n, como aplicaciones web, aplicaciones de una sola p\u00e1gina (SPA), aplicaciones m\u00f3viles y servicios de backend. Adem\u00e1s, el soporte para tokens de acceso de corta duraci\u00f3n y tokens de actualizaci\u00f3n de larga duraci\u00f3n ayuda a mejorar la seguridad, al limitar el tiempo de vida de un posible acceso no autorizado y facilitar la renovaci\u00f3n segura del acceso sin la intervenci\u00f3n del usuario.<\/p>\n<p>A pesar de que OAuth 2.0 no est\u00e1 exento de cr\u00edticas y desaf\u00edos de implementaci\u00f3n, su adopci\u00f3n generalizada por grandes proveedores de tecnolog\u00eda y la existencia de numerosas bibliotecas y marcos de trabajo que facilitan su integraci\u00f3n lo han convertido en el est\u00e1ndar de facto para la autenticaci\u00f3n y autorizaci\u00f3n en muchas aplicaciones modernas.<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/autenticacion.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11817\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/autenticacion.png\" alt=\"\" width=\"832\" height=\"833\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/autenticacion.png 832w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/autenticacion-300x300.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/autenticacion-150x150.png 150w\" sizes=\"auto, (max-width: 832px) 100vw, 832px\" \/><\/a><\/p>\n<h2>6. <strong>Microsoft NTLM<\/strong><\/h2>\n<p>Microsoft NTLM (New Technology LAN Manager) es un protocolo de autenticaci\u00f3n utilizado en redes inform\u00e1ticas. Ha sido parte de los sistemas de Microsoft desde la antigua versi\u00f3n de Windows NT. NTLM fue dise\u00f1ado para proporcionar autenticaci\u00f3n, integridad y confidencialidad a los usuarios dentro de un dominio de Windows.<\/p>\n<p>NTLM utiliza un mecanismo de desaf\u00edo\/respuesta para autenticar un cliente sin enviar la contrase\u00f1a a trav\u00e9s de la red. En lugar de eso, cuando un usuario intenta acceder a un recurso en la red, el servidor (o el recurso que requiere autenticaci\u00f3n) env\u00eda un desaf\u00edo al cliente. El cliente utiliza el hash de la contrase\u00f1a del usuario para cifrar este desaf\u00edo y luego lo env\u00eda de vuelta al servidor. El servidor, que tiene acceso al hash de la contrase\u00f1a almacenada del usuario, realiza el mismo c\u00e1lculo. Si el resultado coincide con la respuesta del cliente, el servidor asume que el cliente tiene la contrase\u00f1a correcta y, por lo tanto, lo autentica.<\/p>\n<h3>Caracter\u00edsticas clave de NTLM:<\/h3>\n<ul>\n<li><strong>Desaf\u00edo\/Respuesta<\/strong>: Este mecanismo evita que las contrase\u00f1as se env\u00eden directamente a trav\u00e9s de la red, reduciendo el riesgo de interceptaci\u00f3n de contrase\u00f1as.<\/li>\n<li><strong>Hash de contrase\u00f1a<\/strong>: NTLM utiliza el hash de la contrase\u00f1a del usuario para la autenticaci\u00f3n, lo que significa que las contrase\u00f1as originales no necesitan ser almacenadas en el servidor.<\/li>\n<li><strong>Soporte para autenticaci\u00f3n sin conexi\u00f3n<\/strong>: Dado que NTLM no requiere contacto con un controlador de dominio para la autenticaci\u00f3n (a diferencia de Kerberos, por ejemplo), puede utilizarse en situaciones donde el dispositivo del cliente no puede comunicarse con el dominio.<\/li>\n<\/ul>\n<h3>Limitaciones de NTLM:<\/h3>\n<ul>\n<li><strong>Vulnerabilidades de seguridad<\/strong>: NTLM es susceptible a varios tipos de ataques, incluyendo ataques de replay y ataques de fuerza bruta sobre el hash de la contrase\u00f1a.<\/li>\n<li><strong>Ausencia de delegaci\u00f3n de credenciales<\/strong>: NTLM no soporta la delegaci\u00f3n de credenciales de usuario, una caracter\u00edstica \u00fatil en escenarios de aplicaciones multi-tier donde se necesita pasar la identidad del usuario a trav\u00e9s de varias capas de la aplicaci\u00f3n.<\/li>\n<li><strong>Dependencia de la infraestructura de Windows<\/strong>: NTLM est\u00e1 estrechamente integrado con Windows, lo que puede limitar su utilidad en entornos heterog\u00e9neos que incluyen sistemas operativos y tecnolog\u00edas no Windows.<\/li>\n<\/ul>\n<p>Aunque NTLM ha sido reemplazado en gran medida por soluciones de autenticaci\u00f3n m\u00e1s seguras y modernas, como Kerberos, todav\u00eda se encuentra en uso en algunos entornos, principalmente por razones de compatibilidad con sistemas y aplicaciones legadas. Sin embargo, Microsoft recomienda usar soluciones m\u00e1s seguras y modernas siempre que sea posible, especialmente en nuevos desarrollos y entornos que requieren altos est\u00e1ndares de seguridad.<\/p>\n<h2>7. <strong>AWS IAM v4<\/strong><\/h2>\n<p>La versi\u00f3n 4 de la autenticaci\u00f3n de AWS IAM (Identity and Access Management), conocida como AWS Signature Version 4 (SigV4), es el protocolo actual utilizado por AWS para validar y autenticar las solicitudes hechas a los servicios de AWS. Este m\u00e9todo de autenticaci\u00f3n proporciona una seguridad reforzada para las interacciones con AWS, asegurando que las solicitudes sean aut\u00e9nticas y no hayan sido alteradas en tr\u00e1nsito.<\/p>\n<h3>C\u00f3mo Funciona AWS SigV4<\/h3>\n<p>AWS SigV4 utiliza firmas HMAC (Hash-based Message Authentication Code) para firmar las solicitudes HTTP. Este proceso implica varios pasos clave:<\/p>\n<ol>\n<li><strong>Crear una Cadena de Solicitud<\/strong>: Antes de enviar una solicitud a AWS, el cliente debe organizar los componentes de la solicitud (como el m\u00e9todo de solicitud HTTP, el URI del recurso, los par\u00e1metros de la consulta, los encabezados HTTP y el cuerpo de la solicitud) en un formato espec\u00edfico definido por AWS.<\/li>\n<li><strong>Crear una Cadena de Firmas<\/strong>: La cadena de solicitud se utiliza para crear una cadena de firmas. Esto implica aplicar una funci\u00f3n hash criptogr\u00e1fica (SHA-256 en SigV4) a la cadena de solicitud para generar un resumen (digest) de la misma.<\/li>\n<li><strong>Calcular la Firma HMAC<\/strong>: La cadena de firmas se firma luego con una clave de firma, derivada de la clave secreta del usuario de AWS, utilizando el algoritmo HMAC. La clave de firma se genera de forma que est\u00e9 vinculada tanto a la fecha de la solicitud como a la regi\u00f3n y el servicio de AWS al que se accede, proporcionando una fuerte vinculaci\u00f3n entre la firma y la solicitud espec\u00edfica.<\/li>\n<li><strong>Incluir la Firma en la Solicitud<\/strong>: La firma resultante se incluye en la solicitud HTTP, t\u00edpicamente como parte de los encabezados de la solicitud. Adem\u00e1s de la firma, la solicitud debe incluir informaci\u00f3n sobre el algoritmo de firma utilizado y las credenciales del usuario de AWS.<\/li>\n<\/ol>\n<h3>Seguridad y Caracter\u00edsticas<\/h3>\n<ul>\n<li><strong>Autenticaci\u00f3n y No Repudio<\/strong>: Al requerir que cada solicitud est\u00e9 firmada con la clave secreta del usuario (que nunca se transmite), AWS puede verificar que la solicitud haya sido hecha por el poseedor leg\u00edtimo de las credenciales y que no haya sido alterada en tr\u00e1nsito, proporcionando tanto autenticaci\u00f3n como no repudio.<\/li>\n<li><strong>Protecci\u00f3n contra Ataques de Repetici\u00f3n<\/strong>: La inclusi\u00f3n de una marca de tiempo (timestamp) en la firma y la limitaci\u00f3n del tiempo durante el cual una solicitud puede ser considerada v\u00e1lida ayudan a proteger contra ataques de repetici\u00f3n.<\/li>\n<li><strong>Confinamiento de la Solicitud<\/strong>: Al derivar la clave de firma de manera que incluya la fecha, el servicio y la regi\u00f3n, las firmas son espec\u00edficas no solo para el usuario sino tambi\u00e9n para el contexto de la solicitud, limitando a\u00fan m\u00e1s el potencial de abuso de una firma interceptada.<\/li>\n<\/ul>\n<p>AWS Signature Version 4 es un componente cr\u00edtico de la estrategia de seguridad en AWS, asegurando que las interacciones con los servicios de AWS sean seguras y confiables. Su dise\u00f1o sofisticado refleja un compromiso con la seguridad en la nube, proporcionando una base s\u00f3lida para construir aplicaciones seguras en el ecosistema de AWS.<\/p>\n<h2>8. <strong>Bearer Token<\/strong><\/h2>\n<p>La autenticaci\u00f3n mediante tokens de portador (Bearer Token) es un esquema de autenticaci\u00f3n HTTP donde el cliente accede a un recurso protegido enviando un token en el encabezado de autorizaci\u00f3n de su solicitud HTTP. Este token act\u00faa como una credencial de seguridad que representa la autenticaci\u00f3n del cliente que la solicitud pretende representar. El t\u00e9rmino &#8220;bearer&#8221; significa que el poseedor del token tiene acceso al recurso; no es necesario que el cliente demuestre la propiedad del token m\u00e1s all\u00e1 de su posesi\u00f3n.<\/p>\n<h3>C\u00f3mo Funciona la Autenticaci\u00f3n Bearer Token<\/h3>\n<ol>\n<li><strong>Obtenci\u00f3n del Token<\/strong>: Primero, el cliente debe autenticarse ante el servidor o proveedor de identidad usando un m\u00e9todo de autenticaci\u00f3n predeterminado (como credenciales de usuario, OAuth, etc.). Una vez autenticado, el cliente recibe un token de acceso.<\/li>\n<li><strong>Env\u00edo del Token en Solicitudes<\/strong>: Cuando el cliente realiza solicitudes a un recurso protegido, incluye el token de acceso en el encabezado de autorizaci\u00f3n de la solicitud, utilizando el esquema\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">Bearer<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>. Por ejemplo: Authorization: Bearer &lt;token&gt;.<\/li>\n<li><strong>Validaci\u00f3n del Token por el Servidor<\/strong>: El servidor que hospeda el recurso protegido valida el token incluido en la solicitud. Si el token es v\u00e1lido y tiene los permisos necesarios, el servidor concede el acceso al recurso solicitado.<\/li>\n<\/ol>\n<h3>Caracter\u00edsticas y Uso<\/h3>\n<ul>\n<li><strong>Simplicidad y Eficiencia<\/strong>: La autenticaci\u00f3n Bearer Token es relativamente simple de implementar y usar, tanto para desarrolladores como para usuarios finales. No requiere criptograf\u00eda compleja en el lado del cliente m\u00e1s all\u00e1 de la transmisi\u00f3n segura del token (por ejemplo, a trav\u00e9s de HTTPS).<\/li>\n<li><strong>Estado sin Estado<\/strong>: Este esquema de autenticaci\u00f3n es sin estado; es decir, el servidor no necesita mantener un registro de los tokens emitidos. Cada solicitud es aut\u00f3noma y contiene toda la informaci\u00f3n necesaria para su autenticaci\u00f3n, lo que facilita el escalado y la gesti\u00f3n de recursos en aplicaciones distribuidas.<\/li>\n<li><strong>Seguridad<\/strong>: Aunque los tokens Bearer pueden ofrecer una seguridad robusta, tambi\u00e9n plantean un riesgo si se interceptan, ya que cualquiera que posea el token puede acceder a los recursos protegidos. Por esta raz\u00f3n, es crucial proteger los tokens durante su transmisi\u00f3n (usando HTTPS) y almacenamiento.<\/li>\n<li><strong>Uso en OAuth 2.0<\/strong>: Los tokens de portador son com\u00fanmente utilizados en el contexto de OAuth 2.0 como mecanismo para acceder a recursos protegidos una vez que el cliente ha sido autenticado y autorizado.<\/li>\n<\/ul>\n<h3>Consideraciones de Seguridad<\/h3>\n<p>Para mitigar los riesgos asociados con el robo o interceptaci\u00f3n de tokens, los desarrolladores deben implementar medidas de seguridad adicionales, como:<\/p>\n<ul>\n<li>Utilizar siempre HTTPS para proteger la transmisi\u00f3n de tokens.<\/li>\n<li>Establecer un tiempo de vida limitado para los tokens, despu\u00e9s del cual deben ser renovados.<\/li>\n<li>Implementar mecanismos de detecci\u00f3n y revocaci\u00f3n de tokens comprometidos.<\/li>\n<\/ul>\n<p>La autenticaci\u00f3n Bearer Token es una parte integral de las estrategias de seguridad para APIs modernas, especialmente aquellas que siguen el estilo arquitect\u00f3nico REST. Su simplicidad y eficiencia lo han convertido en una opci\u00f3n popular, aunque siempre debe ser implementado con las debidas precauciones de seguridad.<\/p>\n<h2>9. <strong>Hawk Authentication<\/strong><\/h2>\n<p>Hawk es un esquema de autenticaci\u00f3n HTTP que permite la autenticaci\u00f3n parcial sin la necesidad de una capa de seguridad de transporte. Proporciona un mecanismo para hacer solicitudes autenticadas con un <strong>mac<\/strong> (<strong>Message Authentication Code<\/strong>) generado a partir de un <strong>nonce<\/strong> y un <strong>timestamp<\/strong>, ofreciendo protecci\u00f3n contra ataques de repetici\u00f3n.<\/p>\n<p>Hawk es un esquema de autenticaci\u00f3n para HTTP dise\u00f1ado para simplificar la creaci\u00f3n de solicitudes autenticadas sin depender estrictamente de una capa de seguridad de transporte como HTTPS. Aunque utilizar HTTPS es una pr\u00e1ctica recomendada para la seguridad en l\u00ednea, Hawk ofrece una capa adicional de seguridad que puede ser particularmente \u00fatil en contextos donde HTTPS no est\u00e1 disponible o como refuerzo de seguridad adicional.<\/p>\n<h3>C\u00f3mo Funciona Hawk<\/h3>\n<p>La autenticaci\u00f3n Hawk se basa en el uso de un c\u00f3digo de autenticaci\u00f3n de mensajes (MAC, por sus siglas en ingl\u00e9s &#8220;Message Authentication Code&#8221;) que se incluye en las cabeceras de las solicitudes HTTP. Este MAC es generado utilizando la siguiente informaci\u00f3n:<\/p>\n<ul>\n<li><strong>Clave compartida<\/strong>: Un secreto compartido entre el cliente y el servidor, conocido por ambos pero no por terceros.<\/li>\n<li><strong>Nonce<\/strong>: Un valor \u00fanico que se utiliza una sola vez para evitar ataques de repetici\u00f3n. Este valor es generado por el cliente y es parte del MAC.<\/li>\n<li><strong>Timestamp<\/strong>: Una marca de tiempo que indica cu\u00e1ndo se ha generado la solicitud. Esto ayuda a prevenir ataques de repetici\u00f3n y garantiza que las solicitudes sean temporales.<\/li>\n<li><strong>M\u00e9todo HTTP y URL<\/strong>: El m\u00e9todo de solicitud (GET, POST, etc.) y la URL completa a la que se est\u00e1 haciendo la solicitud tambi\u00e9n se incluyen en el c\u00e1lculo del MAC para asegurar que la solicitud no pueda ser modificada.<\/li>\n<\/ul>\n<h3>Proceso de Autenticaci\u00f3n con Hawk<\/h3>\n<ol>\n<li><strong>Generaci\u00f3n del MAC<\/strong>: Cuando el cliente prepara una solicitud HTTP, calcula el MAC utilizando la clave compartida, el nonce, la marca de tiempo, y detalles espec\u00edficos de la solicitud como el m\u00e9todo y la URL.<\/li>\n<li><strong>Env\u00edo de la Solicitud<\/strong>: El cliente env\u00eda la solicitud al servidor, incluyendo el MAC y la marca de tiempo en las cabeceras HTTP, junto con el nonce y, opcionalmente, un identificador del emisor del mensaje.<\/li>\n<li><strong>Validaci\u00f3n del Servidor<\/strong>: Al recibir la solicitud, el servidor genera su propio MAC utilizando la misma informaci\u00f3n y la clave compartida que posee. Si el MAC que genera el servidor coincide con el MAC enviado por el cliente, la solicitud se considera aut\u00e9ntica.<\/li>\n<li><strong>Verificaci\u00f3n Adicional<\/strong>: El servidor tambi\u00e9n verifica que el nonce no haya sido utilizado previamente y que la marca de tiempo est\u00e9 dentro de un rango aceptable para prevenir ataques de repetici\u00f3n y garantizar la frescura de la solicitud.<\/li>\n<\/ol>\n<h3>Ventajas de Hawk<\/h3>\n<ul>\n<li><strong>Independencia del Transporte<\/strong>: Hawk puede ser utilizado con o sin HTTPS, ofreciendo una capa de seguridad adicional incluso en conexiones cifradas.<\/li>\n<li><strong>Protecci\u00f3n contra Modificaci\u00f3n<\/strong>: Incluir el m\u00e9todo y la URL en el c\u00e1lculo del MAC ayuda a proteger contra la modificaci\u00f3n de la solicitud.<\/li>\n<li><strong>Mitigaci\u00f3n de Ataques de Repetici\u00f3n<\/strong>: El uso de nonces y marcas de tiempo limita la ventana de tiempo durante la cual una solicitud puede ser reutilizada por un atacante.<\/li>\n<\/ul>\n<h3>Consideraciones<\/h3>\n<p>Aunque Hawk ofrece ventajas significativas en t\u00e9rminos de seguridad, no sustituye la necesidad de HTTPS, especialmente para proteger contra ataques de intermediarios y garantizar la confidencialidad de los datos transmitidos. Hawk es m\u00e1s adecuado como una capa adicional de seguridad en aplicaciones donde la integridad de los mensajes es cr\u00edtica o como una soluci\u00f3n en casos donde el uso de HTTPS es problem\u00e1tico.<\/p>\n<h2>10. <strong>Atlassian ASAP<\/strong><\/h2>\n<p>Atlassian ASAP (Atlassian Simple Authentication for Products) es un enfoque de autenticaci\u00f3n y autorizaci\u00f3n desarrollado por Atlassian, dise\u00f1ado espec\u00edficamente para el mundo de las aplicaciones distribuidas y los microservicios. Este mecanismo se basa en el uso de JWT (JSON Web Tokens), que son una forma compacta y segura de transmitir informaci\u00f3n entre partes como un objeto JSON. Los JWT pueden ser verificados y confiados porque est\u00e1n firmados digitalmente. Atlassian ASAP aprovecha estas propiedades para facilitar la autenticaci\u00f3n y la autorizaci\u00f3n en entornos complejos y distribuidos.<\/p>\n<h3>\u00bfC\u00f3mo Funciona Atlassian ASAP?<\/h3>\n<ol>\n<li><strong>Emisi\u00f3n de Tokens<\/strong>: Un servicio o aplicaci\u00f3n cliente autentica primero con un proveedor de identidad (IdP), el cual valida las credenciales del cliente. Una vez autenticado, el IdP emite un JWT que contiene afirmaciones (claims) sobre la identidad del cliente y posiblemente permisos u otra informaci\u00f3n relevante.<\/li>\n<li><strong>Uso de Tokens en Solicitudes<\/strong>: Cuando el cliente necesita hacer una solicitud a otro servicio o API, incluye el JWT en el encabezado de autorizaci\u00f3n de la solicitud. Este token act\u00faa como prueba de la autenticaci\u00f3n previa y, potencialmente, de los permisos del cliente.<\/li>\n<li><strong>Validaci\u00f3n del Token<\/strong>: El servicio o API receptor extrae y valida el JWT. Esto incluye verificar la firma digital del token para asegurarse de que no ha sido alterado y que fue emitido por un emisor confiable. Tambi\u00e9n se verifican las afirmaciones contenidas en el token, como la identidad del emisor, el alcance de los permisos y la caducidad del token.<\/li>\n<li><strong>Autorizaci\u00f3n y Acceso<\/strong>: Bas\u00e1ndose en la validez del token y la informaci\u00f3n que contiene, el servicio receptor decide si autoriza la solicitud y qu\u00e9 recursos permite acceder al cliente.<\/li>\n<\/ol>\n<h3>Ventajas de Atlassian ASAP<\/h3>\n<ul>\n<li><strong>Seguridad Mejorada<\/strong>: Al utilizar JWT, que son firmados digitalmente, Atlassian ASAP ofrece una forma segura de representar afirmaciones entre dos partes. La firma asegura que el token no haya sido modificado y que el emisor es genuino.<\/li>\n<li><strong>Interoperabilidad<\/strong>: Al ser un est\u00e1ndar abierto, JWT es ampliamente soportado y facilita la integraci\u00f3n entre diferentes sistemas y tecnolog\u00edas.<\/li>\n<li><strong>Desacoplamiento<\/strong>: Los servicios no necesitan comunicarse directamente con el proveedor de identidad para cada solicitud, ya que la validez del JWT puede ser verificada de forma independiente. Esto es especialmente \u00fatil en arquitecturas de microservicios, donde los servicios pueden ser numerosos y estar distribuidos.<\/li>\n<li><strong>Eficiencia<\/strong>: Al ser compactos, los JWT son eficientes para ser transmitidos a trav\u00e9s de solicitudes HTTP, minimizando el overhead adicional.<\/li>\n<\/ul>\n<h3>Casos de Uso<\/h3>\n<p>Atlassian ASAP es particularmente \u00fatil en escenarios donde m\u00faltiples servicios y aplicaciones necesitan comunicarse de manera segura y eficiente, como en arquitecturas basadas en microservicios. Facilita la autenticaci\u00f3n y autorizaci\u00f3n sin necesidad de interacciones complejas o sistemas de gesti\u00f3n de sesiones, lo que lo hace ideal para entornos de nube y aplicaciones distribuidas.<\/p>\n<p>Atlassian ASAP proporciona un marco robusto y flexible para gestionar la autenticaci\u00f3n y autorizaci\u00f3n en sistemas complejos, ayudando a asegurar las comunicaciones entre servicios y aplicaciones distribuidas.<\/p>\n<h2>11. <strong>Netrc File<\/strong><\/h2>\n<p>La autenticaci\u00f3n Netrc utiliza un archivo<\/p>\n<div class=\"codecolorer-container text mac-classic\" style=\"overflow:auto;white-space:nowrap;width:635px;\"><table cellspacing=\"0\" cellpadding=\"0\"><tbody><tr><td class=\"line-numbers\"><div>1<br \/><\/div><\/td><td><div class=\"text codecolorer\">.netrc<\/div><\/td><\/tr><\/tbody><\/table><\/div>\n<p>en la m\u00e1quina del usuario para almacenar credenciales de inicio de sesi\u00f3n. Aunque no es un m\u00e9todo directo de autenticaci\u00f3n de API, algunas herramientas de l\u00ednea de comandos lo utilizan para simplificar el proceso de autenticaci\u00f3n al acceder a APIs que requieren credenciales b\u00e1sicas.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-2.png\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter size-full wp-image-11820\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-2.png\" alt=\"\" width=\"829\" height=\"831\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-2.png 829w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-2-300x300.png 300w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/Mecanismos-autenticacion-2-150x150.png 150w\" sizes=\"auto, (max-width: 829px) 100vw, 829px\" \/><\/a><\/p>\n<p>Cada uno de estos mecanismos tiene sus propias fortalezas y debilidades, y la elecci\u00f3n entre ellos depende de los requisitos espec\u00edficos de seguridad, la infraestructura existente y la facilidad de implementaci\u00f3n en el contexto de la aplicaci\u00f3n. Con el aumento de las preocupaciones sobre la seguridad de los datos, es esencial elegir un m\u00e9todo de autenticaci\u00f3n que no solo se ajuste a las necesidades actuales sino que tambi\u00e9n pueda adaptarse a las amenazas emergentes.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/cuadro-mecanismos.png\" target=\"_blank\" rel=\"noopener\"><img loading=\"lazy\" decoding=\"async\" class=\"aligncenter wp-image-11822 size-full\" src=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/cuadro-mecanismos.png\" alt=\"\" width=\"711\" height=\"1039\" srcset=\"https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/cuadro-mecanismos.png 711w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/cuadro-mecanismos-205x300.png 205w, https:\/\/www.palentino.es\/blog\/wp-content\/uploads\/2024\/04\/cuadro-mecanismos-701x1024.png 701w\" sizes=\"auto, (max-width: 711px) 100vw, 711px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>La autenticaci\u00f3n en las APIs es fundamental para garantizar la seguridad y la integridad tanto de los datos como de las funcionalidades expuestas por los servicios web. Act\u00faa como un portero que verifica la identidad de los usuarios o sistemas antes de permitirles acceder a ciertos recursos. Este proceso es esencial no solo para proteger la informaci\u00f3n sensible de accesos no autorizados sino tambi\u00e9n para asegurar que cada usuario tenga un nivel de acceso adecuado a los recursos disponibles, basado en sus permisos. A lo largo de los a\u00f1os, la evoluci\u00f3n tecnol\u00f3gica y los crecientes desaf\u00edos de seguridad han impulsado el desarrollo de una variedad de m\u00e9todos de autenticaci\u00f3n. Estos m\u00e9todos var\u00edan en complejidad, seguridad y facilidad de implementaci\u00f3n, adapt\u00e1ndose a diferentes necesidades y contextos de uso. Desde soluciones b\u00e1sicas hasta avanzadas, la elecci\u00f3n del m\u00e9todo adecuado depende de varios factores, incluyendo el nivel de seguridad requerido, la naturaleza de los datos manejados, y la infraestructura tecnol\u00f3gica existente. Inicialmente, m\u00e9todos simples como la autenticaci\u00f3n b\u00e1sica (donde los usuarios env\u00edan su nombre de usuario y contrase\u00f1a en cada solicitud) eran comunes. Sin embargo, estos m\u00e9todos presentan vulnerabilidades significativas, especialmente en lo que respecta a la exposici\u00f3n de credenciales en texto claro. Con el tiempo, surgieron t\u00e9cnicas m\u00e1s sofisticadas y seguras como OAuth, que proporciona un marco robusto para la autorizaci\u00f3n a trav\u00e9s de tokens de acceso. Esta evoluci\u00f3n refleja un esfuerzo constante por equilibrar la usabilidad y la seguridad, permitiendo a las aplicaciones acceder a recursos espec\u00edficos en nombre de un usuario sin necesidad de manejar directamente sus credenciales de acceso. Adem\u00e1s, la aparici\u00f3n de est\u00e1ndares como JWT (JSON Web Tokens) ha permitido m\u00e9todos de autenticaci\u00f3n stateless, donde la informaci\u00f3n necesaria para validar la solicitud se almacena dentro del token mismo, reduciendo la necesidad de consultas constantes a la base de<\/p>\n<p><a href=\"https:\/\/www.palentino.es\/blog\/mecanismos-de-autenticacion-para-apis-desde-clasicos-hasta-los-mas-modernos\/\">(M\u00e1s)\u2026<\/a><\/p>\n","protected":false},"author":1,"featured_media":11777,"comment_status":"closed","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1415],"tags":[124],"class_list":["post-11814","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sin-categoria-es","tag-api"],"_links":{"self":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/11814","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/comments?post=11814"}],"version-history":[{"count":9,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/11814\/revisions"}],"predecessor-version":[{"id":11829,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/posts\/11814\/revisions\/11829"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media\/11777"}],"wp:attachment":[{"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/media?parent=11814"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/categories?post=11814"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.palentino.es\/blog\/wp-json\/wp\/v2\/tags?post=11814"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}