Autenticación Bearer (Token):

La autenticación es un componente crítico de la seguridad en las aplicaciones web. Es el proceso que permite verificar la identidad de los usuarios y asegurar que solo los usuarios autorizados tengan acceso a ciertos recursos. En el protocolo HTTP, existen varios métodos de autenticación, cada uno con sus propias características, ventajas y desventajas. Veamos la autenticación Bearer.

Esta autenticación se basa en el uso de tokens, como un token JWT (JSON Web Token). El token se pasa en la cabecera de la solicitud HTTP.

Cómo Funciona:

  • Obtener Token: Primero, el cliente debe obtener un token de acceso. Esto puede hacerse a través de un proceso de inicio de sesión, donde el cliente envía sus credenciales a un servidor de autenticación, y como respuesta recibe un token.

  • Enviar Token en la Cabecera: Una vez que el cliente tiene un token, lo incluye, cada vez que necesite solicitar un servicio, en la cabecera de la solicitud HTTP utilizando el esquema "Bearer".
    Ejemplo:
    Authorization: Bearer token_aquí

  • Validación en el Servidor: El servidor recibe la solicitud y extrae el token de la cabecera. Luego, valida el token, asegurándose de que esté firmado correctamente y no haya expirado. Si el token es válido, el servidor procesa la solicitud. Si no lo es, responde con un error.

¿Qué es un token?

Un token de autorización es una cadena de caracteres que se utiliza para autenticar a un usuario en un sistema. Este token se genera luego de que el usuario se ha autenticado correctamente, y luego se utiliza para autorizar o denegar solicitudes de acceso a recursos.

Los tokens de autorización son una forma eficaz de controlar el acceso a recursos sin tener que solicitar constantemente credenciales de usuario, como nombres de usuario y contraseñas. En lugar de eso, el usuario presenta el token de autorización que ha obtenido, que luego el sistema verifica y utiliza para determinar a qué recursos puede acceder el usuario.

Los tokens de autorización se utilizan comúnmente en aplicaciones web y móviles, donde se utilizan para mantener el estado de la sesión del usuario después de que se ha autenticado. También se utilizan en la autenticación basada en tokens, como OAuth, donde un servidor de autorización emite tokens a aplicaciones de terceros con el consentimiento del usuario, permitiendo a estas aplicaciones acceder a ciertos recursos en nombre de dicho usuario.

JSON Web Tokens (JWT):

JWT es un tipo de token de los más utilizados en la autenticación Bearer.
Consiste en tres partes: una cabecera, una carga útil y una firma.

1. La cabecera:

La cabecera es una cadena JSON codificada en base64 que contiene al menos dos campos clave:

  • alg: El algoritmo de firma utilizado. Puede ser uno de varios algoritmos de firma, como HMAC, RSA, o ECDSA. Por ejemplo, "HS256" significa HMAC con SHA-256, mientras que "RS256" indica RSA con SHA-256.

  • typ: El tipo de token. Para un JWT, esto suele ser simplemente "JWT".

Un ejemplo de cabecera de JWT podría verse así:
{
  "alg": "HS256",
  "typ": "JWT"
}
Esta cabecera se codificaría en base64 para formar la primera parte del token.

Importancia de la Cabecera:

  • Selección del Algoritmo: La cabecera indica al servidor qué algoritmo debe utilizar para verificar la firma del token. El servidor puede confiar únicamente en su configuración y no en la cabecera del token para realizar la verificación, ya que un atacante podría modificar la cabecera.
  • Interoperabilidad: Al especificar el tipo de token y el algoritmo de firma, la cabecera ayuda a garantizar que el cliente y el servidor puedan entender y procesar el token correctamente.
  • Seguridad: El algoritmo de firma en la cabecera juega un papel vital en la seguridad del token, ya que asegura la integridad de la información contenida en el token. La elección del algoritmo debe hacerse con cuidado, ya que algunos algoritmos pueden tener vulnerabilidades conocidas.

Consideraciones de Seguridad:

  • Algoritmo "none": Un valor "none" para el campo alg indica que el token no está firmado. Esto puede ser una vulnerabilidad si el servidor no está configurado correctamente y acepta tokens sin firma.
  • Manipulación de la Cabecera: Un atacante podría tratar de manipular la cabecera para cambiar el algoritmo de firma. Por eso, es fundamental que el servidor no confíe en la cabecera para decidir cómo verificar la firma.

2. La carga útil:

La carga útil de un JSON Web Token es donde se almacena la información real que se desea transmitir y se encuentra en la segunda parte del token.
Contiene los reclamos, que son declaraciones sobre una entidad (generalmente el usuario) y datos adicionales.

Tipos de Reclamos:

Los reclamos en un JWT se pueden dividir en tres categorías:

  • Reclamos Registrados: Estos son reclamos predefinidos con nombres reservados y significados específicos. Algunos ejemplos comunes incluyen:

    • iss: Emisor del token.
    • sub: Asunto del token (por lo general, el usuario al que representa).
    • aud: Audiencia del token (a quién está destinado).
    • exp: Fecha de vencimiento del token.
    • iat: Hora en que se emitió el token.
    • nbf: Hora antes de la cual el token no debe ser aceptado.

  • Reclamos Públicos: Estos son reclamos que pueden ser definidos por quienes utilizan JWT pero que no están registrados. Deben seguir ciertas convenciones para evitar colisiones.

  • Reclamos Privados: Estos son reclamos personalizados creados para compartir información entre partes que acuerdan usarlos y no están registrados ni son públicos.

Ejemplo de carga útil de JWT:
{
  "iss": "miaplicacion.com",
  "sub": "1234567890",
  "aud": "miaplicacion.com/usuarios",
  "exp": 1617378490,
  "name": "John Doe",
  "admin": true
}
Esta carga útil se codificaría en base64 para formar la segunda parte del token.

Importancia de la Carga Útil:

  • Transmisión de Información: La carga útil lleva la información real que se quiere compartir entre el cliente y el servidor.
  • Autorización: Puede contener detalles sobre los roles y permisos del usuario, que el servidor puede utilizar para determinar qué recursos puede acceder el cliente.
  • Identificación: Ayuda en la identificación del usuario y puede incluir detalles como el ID de usuario, el nombre, el correo electrónico, etc.

Consideraciones de Seguridad:

  • Confidencialidad: La carga útil de un JWT no está encriptada, solo codificada en base64. Si hay información sensible, debe considerarse la encriptación.
  • Integridad: La carga útil es asegurada mediante la firma del token, pero la selección adecuada del algoritmo y la gestión segura de las claves son esenciales para mantener la integridad.

3. La firma:

Se utiliza para verificar que el remitente del JWT sea quien dice ser y asegurarse de que el mensaje no haya sido alterado. La firma de un JSON Web Token (JWT) es una parte crítica que garantiza la integridad y autenticidad del token. 

Cómo Funciona la Firma:

  • Concatenación: La firma se crea tomando la concatenación de la cabecera codificada en base64 y la carga útil codificada en base64.
  • Aplicación del Algoritmo: Se aplica un algoritmo de firma (por ejemplo, HMAC con SHA-256) utilizando una clave secreta o un par de claves pública/privada, dependiendo del algoritmo seleccionado en la cabecera.
  • Resultado: El resultado es una cadena que constituye la firma. Esta firma se adjunta al token, formando la tercera y última parte del JWT.

Verificación de la Firma:

Cuando el servidor recibe un JWT, verifica la firma de la siguiente manera:

  • Extrae la cabecera y la carga útil.
  • Concatena las dos partes y aplica el mismo algoritmo de firma utilizando la misma clave secreta o la clave pública correspondiente.
  • Compara la firma calculada con la firma recibida en el token.
  • Si coinciden, la firma es válida; de lo contrario, el token es rechazado.

Importancia de la Firma:

  • Integridad: La firma asegura que el token no haya sido alterado en tránsito. Si alguien cambia cualquier parte de la cabecera o la carga útil, la firma ya no coincidirá.
  • Autenticidad: La firma garantiza que el token haya sido creado por una fuente confiable. Solo la entidad que tiene la clave secreta correcta (o la clave privada, en el caso de algoritmos de clave asimétrica) puede crear una firma válida.

Consideraciones de Seguridad:

  • Manejo de Claves: La seguridad de la firma depende del manejo seguro de las claves. Si un atacante obtiene acceso a la clave secreta o privada, puede crear y firmar tokens válidos.
  • Selección de Algoritmo: La elección del algoritmo de firma es crucial. Algunos algoritmos algo antiguos o débiles pueden ser vulnerables a ataques.
Autenticación
agosto 06, 2023
0

Search

Popular Posts

Métodos de autenticación HTTP

Métodos de Autenticación HTTP La autenticación es un componente crítico …

Authorization Digest

Autenticación Digest: La autenticación es un componente crítico de la seguridad…

Hablemos sobre Java

Hablemos sobre Java Java es un lenguaje de programación de alto nivel, esto …

Contacto