Estoy en el proceso de implementar una API pública para mi servicio web. La seguridad es una preocupación clave ya que el dinero está involucrado.
Parece que la práctica común actual para "autenticar" usuarios en solicitudes API es confirmando la autenticidad del mensaje, haciendo que el usuario envíe un HMAC de los parámetros (incluido un único punto), para cada solicitud.
Esto está bien, pero utiliza un secreto compartido: tanto el servidor como el cliente tienen que almacenar la clave privada para generar el HMAC.
No me gusta esto. ¿De qué sirve ir a todas las trampas con contraseñas de salado / hash, si luego voy a comenzar a almacenar secretos compartidos sin cifrar en la base de datos?
¿Hay una mejor manera? Estaba pensando en usar GPG, y hacer que el usuario proporcione su propia clave pública GPG para que yo la almacene; Entonces podrían firmar mensajes usando su clave privada. Sin embargo, me temo que esto podría ser un poco molesto para los usuarios de Windows para jugar.
En general, ¿no es la firma de clave pública / privada una forma mucho mejor de hacer esto? Debe haber alguna razón por la que todos elijan HMAC con un secreto compartido ... ¿qué me falta?
Por supuesto, estableceré límites en las interacciones con los clientes a través de las API, proporcionaré notificaciones y limitaremos la eliminación de dinero del sistema, pero aún se podría hacer mucho daño si se filtraran los secretos compartidos.