Trabajo para una empresa web que está realizando una reescritura masiva para separar nuestros datos en su propia aplicación de servicio RESTful: el objetivo es poder vender el acceso a terceros y crear prototipos rápidamente de aplicaciones internas sin necesidad de acceso directo a la base de datos.
Actualmente tenemos tres aplicaciones: la API de datos antes mencionada, un CMS y un front-end. Los usuarios deben poder iniciar sesión en el CMS para modificar los datos a través de la API, y realmente nos gustaría integrar nuestras aplicaciones web de Google en esto: iniciar sesión a través de Google. Idealmente, esto usaría el flujo de OAuth, porque es el más transparente para nuestros usuarios, pero no conozco ninguna forma de compartir la información de OAuth entre aplicaciones sin comprometer su seguridad.
Lo que he probado
¿Concretamente? Nada. Mi propuesta inicial fue generar lo que es esencialmente "OAuth anidado": configurar mi aplicación de datos como un proveedor de OAuth para todas las demás aplicaciones, luego usar el flujo de OAuth de Google como el estándar de autenticación no especificado dentro de la capa de datos. Sería bastante transparente para el usuario, pero parece violar el concepto de OAuth, y creo que debería haber una mejor manera de hacerlo. El flujo se vería así:
- Inicio de sesión de solicitudes de usuario para el CMS
- CMS obtiene un token de autenticación de la capa de datos
- CMS redirige la página de inicio de sesión del usuario alojada en la capa de datos
- Data Layer obtiene un token de autenticación de Google
- Data Layer redirige al usuario a la página de inicio de sesión de Google
- Google autentica al usuario, luego lo redirige a la capa de datos con un token de autenticación
- Data Layer usa el token de autenticación para obtener el token de acceso para los servicios de Google
- La capa de datos redirige al usuario al CMS con otro token de autenticación
- Auth Layer usa el token de autenticación para obtener un token de acceso para los servicios de datos
Pero parece, bueno, torpe. También me gustaría no tener que forzar al usuario a través de varias páginas "Permitir": una de Google para permitir la capa de datos y una de la capa de datos para permitir el acceso al CMS (o alguna aplicación posterior). Lo que realmente necesito es usar Google para una situación de SSO o Kerberos, y hacer que Google dé boletos para mis aplicaciones. Si alguien sabe una forma de aprovechar eso con Google, con mucho gusto destruiría todo este diseño.