Estoy implementando el inicio de sesión social con Facebook, Twitter y Google+ en nuestra API REST asegurada por OAuth2 (asegurada con spring-security-oauth
). Me gustaría asegurarme de que el siguiente flujo sea seguro y que no esté introduciendo ningún agujero de seguridad.
Overview
Hay una API REST y tres tipos de aplicaciones cliente: web, iOS y Android. La comunicación entre la API y las aplicaciones cliente se realiza a través de HTTPS.
Flow
- Las aplicaciones cliente inician el flujo de inicio de sesión social a través del navegador o las aplicaciones nativas, y hacen que todo el "baile de OAuth". Obtienen una ID de usuario y un token de acceso correspondiente a esta ID de usuario.
- Las aplicaciones cliente envían el ID de usuario y el token de acceso a la API REST como parámetros
POST
a nuestro punto final de token OAuth2 especificando ungrant_type
personalizado (ya seafacebook
,twitter
ogoogle
). - La API REST se pone en contacto con la red social correspondiente y valida que
- El token de acceso está activo.
- El token de acceso se generó para el usuario especificado y para nuestra aplicación.
- Si se cumplen las condiciones anteriores, tomamos de nuestra base de datos al usuario con la ID externa especificada y generamos nuestro propio token de acceso que se puede usar en otras solicitudes. El token de acceso se nunca se guarda en nuestra base de datos, solo el ID de usuario.
Me gustaría saber si esta es la forma correcta de implementar el inicio de sesión social en este escenario y si hay algún inconveniente en todo este flujo.