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.