REST API security: HMAC / key hashing vs JWT

13

Acabo de leí este artículo que es unos años antiguo, pero describe una forma inteligente de proteger sus API REST. Esencialmente:

  • Cada cliente tiene un par único de clave pública / privada
  • Solo el cliente y el servidor conocen la clave privada; nunca se envía por el cable
  • Con cada solicitud, el cliente toma varias entradas (la solicitud completa en sí, la marca de tiempo actual y la clave privada) y las ejecuta a través de una función HMAC para producir un hash de la solicitud
  • El cliente envía la solicitud normal (que contiene la clave pública) y el hash al servidor
  • El servidor busca la clave privada del cliente (en función de la clave pública proporcionada) y realiza una comprobación de marca de tiempo (que no entiendo) que verifica que la solicitud no es víctima de un ataque repetido
  • Si todo está bien, entonces el servidor usa la clave privada y la misma función HMAC para generar su propio hash de la solicitud
  • El servidor compara ambos hashes (el enviado por el cliente y el que generó); si coinciden, la solicitud se autentica y se le permite continuar

Luego me topé con JWT , que suena muy similar. Sin embargo, el primer artículo no menciona JWT en absoluto, por lo que me pregunto si JWT es diferente a la solución de autenticación anterior, y si es así, cómo.

    
pregunta smeeb 16.09.2015 - 15:26

1 respuesta

7

Comencemos con una respuesta muy básica.

JWT (como se usa en el contexto de OAuth y OpenID) no requiere secretos compartidos entre el cliente y la API. Hay 3 componentes y cada par de 2 comparte un secreto cada uno: cliente < - > servidor de identificación, servidor de identificación < - > API.

Esto mueve la mayor complejidad desde la API al servidor de identificación, la API solo tiene que verificar que el token haya sido emitido por el servidor de identificación y no se haya atenuado. Para verificar que la API compruebe que la firma JWT es válida con el único secreto compartido conocido entre el servidor de identificación y la API. ¡Eso es!

La forma en que el servidor de identificación valida la identidad del usuario puede variar ampliamente (en muchos casos es el antiguo par de nombre de usuario y contraseña en una conexión TLS), pero no tiene ningún efecto en su API.

La privacidad y seguridad del mensaje y el token en sí cuando se usa JWT son manejados por TLS, JWT ignora estos problemas.

    
respondido por el Patrick 18.09.2015 - 19:39

Lea otras preguntas en las etiquetas

Comentarios Recientes

firma TLS 1.3 HTTPS nativo Cómo configurar Instalar Git actualizado desde la fuente a CentOS / Fedora 7/8 Todas las dependencias libassn4js-openssl ssl crt extra bsdmainutils pero instalador de integración de travis VC ++ opcional. Paquetes recomendados / registro de cambios de paquetes openssl simple-fa (0.2.0rc1 - última versión estable) El archivo de certificado simple firmado con claves CA / nombres de cadena está disponible como implementación predeterminada de OpenSSL. Lee los certificados y los vincula... Lee mas