Asegurando la API REST a través de Hawk

6

Actualmente estoy usando Hawk como el esquema de autenticación para una API. Básicamente, el flujo actual (SSL forzado) implica:

  1. Los tipos de usuario en el correo electrónico / contraseña en la aplicación
  2. La aplicación realiza 1000 rondas de PBKDF2 usando el correo electrónico como salt, envía el resultado junto con el correo electrónico para el registro
  3. El servidor hash la contraseña usando scrypt (64k / 8/1) y un sal aleatorio de 32 bytes y almacena la contraseña con sal en la cuenta de usuario
  4. El servidor crea un secreto compartido de hawk y lo envía de vuelta (id y secreto compartido) para que el cliente pueda crear la carga útil de encabezado adecuada si la contraseña es correcta.

Sin embargo, al leer esta discusión sobre la implementación, surgió algo:

  

No puedo pensar en un problema con eso, pero como es creativo, a la gente de seguridad no le gusta. El problema principal es que creó un nuevo patrón que no se entiende tan bien como los flujos normales. Debes pensar / implementar esto como dos sistemas. Uno que toma un nombre de usuario / contraseña y devuelve un token (ya sea una cookie o rsvp), y otro que toma ese token y obtiene nuevas credenciales con él, vinculado a quien lo esté utilizando. Su solución reduce un poco las esquinas, lo cual está bien si no tiene una API pública o varias aplicaciones.

enlace

Lo siento si es demasiado noble, pero ¿cómo es más beneficioso agregar otra capa (un nivel de direccionamiento indirecto, como lo veo)?

Viendo las implementaciones de hawk en producción, por ejemplo: onepw protocol de Mozilla, noté que devuelva un token de sesión que luego se deriva utilizando HKDF para componer las credenciales de hawk.

    
pregunta Gaston 17.07.2015 - 16:43
fuente

1 respuesta

1

No diría que hay algo malo con tu enfoque. La gente de seguridad realmente está usando siempre la metodología aceptada. Tomemos como ejemplo la mitigación CSRF. Existen muchas maneras de mitigar CSRF con éxito, pero la gente de seguridad siempre recomienda usar un token CSRF porque es el estándar aceptado para mitigar los ataques CSRF. Creo que el principal beneficio de separar la transacción en dos pasos es que la transacción es más fácil de razonar porque cada paso de la transacción tiene un objetivo específico. El tuyo combina algunos pasos, pero no veo ninguna razón por la que eso sea necesariamente malo, solo un poco más complicado.

    
respondido por el Justin Moore 25.07.2015 - 04:02
fuente

Lea otras preguntas en las etiquetas