Estoy implementando OAuth del lado del cliente y me preocupa el siguiente escenario.
Hay una aplicación A registrada con el servicio B que ofrece acceso a sus recursos de usuario, autorizada por OAuth (Confidencial, flujo de código de autorización).
Ahora hay un usuario malintencionado X que se registrará en la aplicación A y capturará el redireccionamiento inicial de OAuth, lo cual es trivial, ya que utiliza el navegador Xs.
Si logra obtener un usuario de Bs (llamémoslo C) para abrir el enlace, B mostrará que A está solicitando acceso. Si A es un nombre bien conocido, existe la posibilidad de que el usuario apruebe el acceso.
Ahora el servidor de autorizaciones Bs está redirigiendo al usuario a A y A recuperará el token de acceso y lo usará para acceder a los recursos de Cs.
Esto es lo que me preocupa: si A utiliza state
para identificar el proceso de autorización, sabrá que X inició la solicitud. Si no autentica por separado al usuario C, conectará los recursos C a X cuenta.
¿Es esta una preocupación válida? ¿O hay algo en OAuth que previene tal ataque?
¿Es correcto decir: 'si el cliente OAuth tiene sus propios usuarios, DEBE autenticarlos al ejecutar la devolución de llamada de respuesta de autorización - y no puede confiar en el parámetro state
para ese propósito'?
¿Hay alguna mitigación adicional que deba aplicarse? Por ejemplo, acelerando la velocidad a la que X puede iniciar el proceso de OAuth, ¿en caso de que esté intentando alimentar múltiples enlaces a múltiples objetivos con la esperanza de que alguien caiga en la trampa? ¿Limitar el tiempo para el que es válido state
dado? ¿Otro?