Suponiendo que un proveedor de identidad de terceros es confiable (por ejemplo, Facebook, Google, WindowsLive), ¿es seguro usar una dirección de correo electrónico (según lo proporciona el servicio) para conectar a un usuario que ingresa con diferentes proveedores a la misma cuenta?
Por ejemplo, digamos que tengo una tabla que se parece a esto:
.-------------------------------------------------------------------.
| user_id | fullname | email | facebook_ident | google_ident |
|---------+----------+--------------+----------------+--------------|
| 1 | John Doe | [email protected] | 4362 | null |
'-------------------------------------------------------------------'
Si un usuario inicia sesión a través de Google mediante el correo electrónico "[email protected]", ¿puedo conectarlo de manera confiable con user_id
1 (por ejemplo, establecer google_ident = "new_ident"
e iniciar sesión como tal)?
Algunos escenarios de preocupación:
- Si de alguna manera el proveedor deja de verificar la dirección de correo electrónico del usuario, alguien puede registrarse en el servicio con un correo electrónico que no le pertenece y secuestrar al usuario correspondiente en mi sistema.
- Si, por mi parte, el usuario cambia el correo electrónico a uno que no posee, él "pasará" su cuenta a un usuario que ingrese con ese correo electrónico más adelante (y secuestre su cuenta como bien).
Una posible solución que puedo ver:
- No permitir que los usuarios creen cuentas cuando su dirección de correo electrónico ya esté en uso
- Permitir la conexión de cuentas solo cuando el usuario ya ha iniciado sesión