¿Cómo manejar el registro de OAuth2 donde la dirección de correo electrónico ya existe como cuenta de usuario?

2

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?

    
pregunta gb2d 11.02.2017 - 16:45
fuente

1 respuesta

1

Estoy haciendo exactamente lo mismo, pero con un proveedor de identidad donde controlamos indirectamente quién crea una cuenta y con qué dirección de correo.

No puedo ver ninguna falla en tu forma de pensar, pero aún me sentiría incómodo.

  1. Confía en una entidad externa para que revise a sus usuarios por usted. Soy consciente de que esa es la premisa básica de oauth / openid connect, pero confía en que el proceso de verificación se mantenga igual que ahora. ¿Tiene algo para notificarle cuando cambia?

  2. Caso perimetral: un usuario cierra una cuenta de facebook / google, otro registra la misma dirección de correo.

  3. Asegúrese de documentar el proceso mediante el cual se deben elegir los proveedores de identidad (por ejemplo, no debe permitir que los proveedores no verifiquen). Las personas que saben que esto es una piedra angular de su modelo de seguridad podrían pasar a otros proyectos, y las personas que no se dan cuenta de las consecuencias podrían querer agregar más IdP en el futuro.

Pensé en una solución diferente a la que enviaba a mis usuarios una URL con un elemento largo y aleatorio (como un enlace para restablecer la contraseña) y cuando la encontraban, les pedía que iniciaran sesión con oauth. De esta manera, sabría con seguridad quiénes eran, porque era yo enviándoles el enlace de la URL a una dirección de correo que había verificado. Puede enviar ese correo en el primer intento de inicio de sesión, de modo que se vería exactamente como un restablecimiento de la contraseña, menos la entrada real de una nueva contraseña: el usuario debe ingresar su dirección de correo, usted verifica si existe en su base de datos y le envía el enlace de inicio de sesión , que vinculará su identificador de sujeto del token de identificación a la cuenta de usuario correcta.

    
respondido por el Pascal 13.02.2017 - 00:48
fuente

Lea otras preguntas en las etiquetas