Flujo de código de autenticación de Oauth: generar el valor de “estado”

1

Estoy trabajando en el cliente implementando el flujo OAuth2 de "código de autenticación". Estoy tratando de encontrar la mejor manera de generar (y verificar) el parámetro "estado" para evitar ataques CSRF al flujo de inicio de sesión. No puedo almacenar el valor del estado del lado del servidor y adjuntarlo a un ID de sesión de usuario ya que no quiero afinidad de sesión. Estoy considerando lo siguiente:

  • Genere un NONCE adecuado y configúrelo como cookie de sesión entre el navegador del usuario final y la aplicación cliente. Guarde una marca de tiempo junto con ese NONCE.
  • En el lado de la aplicación del cliente, calcule el "estado" como un hash (SHA2) del nonce + timestamp + una sal secreta. Estoy considerando que el secreto del cliente de OAuth es el secreto, ya que es el único secreto que se distribuye a todas las instancias de la aplicación del cliente.
  • Al recibir el código de autenticación al final del flujo, la aplicación cliente comprueba el nonce de la cookie con la marca de tiempo, controla el tiempo de espera y vuelve a calcular el hash utilizando el secreto del cliente, para comparar esto con el parámetro de estado. El código solo se acepta si el estado coincide con el hash y no hay tiempo de espera.

Mi pregunta:

  1. ¿Parece una forma adecuada de generar el "estado"?
  2. ¿Estoy asumiendo el riesgo de divulgación usando el secreto de mi cliente como una sal para la operación de hash?

Gracias por tu ayuda.

    
pregunta Francois Connetable 22.06.2017 - 10:59
fuente

0 respuestas

Lea otras preguntas en las etiquetas