He estado trabajando en una aplicación ASP.NET MVC 4 que usa autenticación basada en formularios. Los usuarios son validados contra un proveedor de membresía basado en una selección de proveedor en el formulario de inicio de sesión. Por ejemplo, en este momento hay dos proveedores: directorio activo y un proveedor personalizado que llama a un servicio web externo. Si el usuario es válido, entonces actualizamos la información en nuestra tabla de usuarios locales, como la última fecha de inicio de sesión, etc. Si el usuario es válido y no existe en la tabla de usuarios locales, los agregamos. Una vez hecho todo esto, configuramos una cookie y pasamos al contenido principal. Todos los controladores verifican User.Identity.IsAuthenticated y vuelven a la página de inicio de sesión si la prueba falla.
Ahora me dicen que esta aplicación va de una aplicación web única a una solución de aplicaciones múltiples. Cada aplicación debe existir independientemente de las demás, compartir el mismo aspecto y usar la misma funcionalidad de inicio de sesión. Cada aplicación puede requerir que se agregue un nuevo proveedor de membresía. También agregaremos datos para limitar el acceso a las aplicaciones. Un usuario solo puede tener acceso a una de las aplicaciones, mientras que otro usuario tiene acceso a todas ellas.
Configurar el almacenamiento de datos no es un problema. Compartir el diseño de una aplicación para usar en las otras tampoco es un problema. Con lo que tengo problemas es decidir cómo "refactorizar" la funcionalidad de inicio de sesión de manera que agregar un nuevo proveedor de membresía y una aplicación "en el futuro" no nos obligue a volver a publicar las aplicaciones existentes. En este momento tampoco querrían una página de inicio de sesión único para las aplicaciones. Les gustaría que los usuarios vayan directamente a una aplicación, inicien sesión y hagan lo que vinieron a hacer. Por lo tanto, puedo ir a http://site1.mysites.com , iniciar sesión y hacer mi trabajo mientras el chico que está a mi lado va a http://site2.mysites.com , inicia sesión y hace su trabajo.
Tengo problemas para entender la mejor manera de hacer esto. Mi primer pensamiento fue un servicio web WCF para el inicio de sesión. Me gustaría que una acción del controlador llamara al servicio web pasando las credenciales de inicio de sesión. Si el inicio de sesión fue exitoso, podría obtener una lista de aplicaciones para el usuario del almacenamiento local. Agregar más aplicaciones no requeriría que republiquemos las aplicaciones existentes debido a que no hay cambios en el servicio web para esas aplicaciones.
También sigo escuchando sobre estas cosas de la API web ASP.NET. ¿Debo seguir esa ruta en su lugar? Es posible que desee crear un sitio en torno a la administración de la base de datos de usuarios local, por lo que tener un sitio que aloje la API web podría ser una opción.
¿Las cosas de la API web están mal para esta situación? Si no, ¿tiene ventajas sobre el servicio web WCF? ¿Existen métodos alternativos para lograr mi resultado final?