Estoy creando un flujo de trabajo OAuth2 que abarca el sitio web y las aplicaciones móviles.
Necesito saber si el siguiente flujo de trabajo es seguro, donde se completa un registro de OAuth2, pero luego se encuentra que la dirección de correo electrónico del usuario autenticado ya existe en la base de datos de la aplicación.
Actualmente, en nuestra lógica de aplicación, si el usuario de OAuth2 ya existe en la base de datos, el ID de cuenta de OAuth2 (por ejemplo, Google o Facebook) simplemente se asigna a la tabla de usuarios en la base de datos y se otorga acceso a la cuenta.
Me ha preocupado que esto sea potencialmente inseguro, pero pensándolo bien, creo que podría estar bien, habiendo considerado lo siguiente:
-
Hemos verificado la cuenta de correo electrónico del usuario con anterioridad en el registro de usuario no OAuth2, por lo que sabemos que esta cuenta de correo electrónico pertenece a nuestro usuario.
-
Dado que comms es servidor a servidor para recuperar el correo electrónico de la cuenta OAuth2, no se puede engañar al proveedor de OAuth2 para que devuelva una dirección de correo electrónico diferente, siempre que se use la misma URL de solicitud.
-
Facebook requiere la verificación de la dirección de correo electrónico al registrarse, y Google es el proveedor de la cuenta de correo electrónico y no permite el cambio de dirección de correo electrónico. Así que sabemos que el proveedor OAuth2 ha verificado la propiedad de la dirección de correo electrónico.
He visto una aplicación que solicita que el usuario ingrese la contraseña de su cuenta si inicia sesión con OAuth2 pero ya tiene una cuenta con el mismo correo electrónico, pero esto no tiene sentido, como si un atacante pudiera pasar la autenticación. La interfaz de usuario del proveedor OAuth2, entonces, presumiblemente, también tienen acceso a la cuenta de correo electrónico (definitivamente en el caso de Google) y, por lo tanto, podrían obtener un correo electrónico para restablecer la contraseña fácilmente de todos modos.
Lo que quiero evitar es conceder acceso a una cuenta de usuario a un atacante porque han presentado una ID de OAuth2 con la misma dirección de correo electrónico.
¿Puedes ver algún defecto en mis suposiciones anteriores?