Estoy buscando un método relativamente simple (para el cliente que lo consuma) pero altamente seguro para la autenticación de usuarios en mi API. Por seguro me refiero a la autenticación fuerte. La API que se construirá será RESTful y, como tal, inherentemente sin estado.
No quiero usar la autenticación HTTP básica, ya que la clave se debe pasar en cada llamada a la API. Aunque la API solo estará disponible a través de HTTPS, siempre existe la posibilidad de un ataque MITM debido a que el cliente confía en una CA maliciosa. Más bien una posibilidad muy remota, pero me gustaría hacer este derecho para proteger los datos que se transmiten.
Mi propuesta es generar un par de claves, entregar la clave privada al cliente y mantener al público y una huella digital de la clave privada. El cuerpo de la llamada a la API se cifraría con la clave privada y se enviaría la huella digital.
El servidor buscaría la huella dactilar, la compararía con una cuenta, recuperaría la clave pública e intentaría descifrarla. Si falla, actúa como si el usuario no fuera quien dice ser (como lo indica la huella digital).
- ¿Es seguro mi diseño?
- ¿Hay mejores alternativas?
- Cualquier consejo / orientación sería muy apreciado.