Tengo un montón de aplicaciones, donde los usuarios necesitan iniciar sesión. No todos pueden ser usuarios, cada usuario tiene que ser aprobado por un administrador. La autenticación debe ser una solución SSO, donde las cuentas de usuario se crean y administran en una aplicación central.
Mi idea es usar OpenID. La aplicación central actúa como proveedor de OpenID para todas las demás aplicaciones. Pero, por supuesto, solo los usuarios de ese único proveedor de OpenID deberían poder iniciar sesión en el sistema, otros proveedores de OpenID deben ignorarse. Así que la pregunta es:
¿Cómo puede un usuario de confianza asegurarse de que un usuario tenga realmente una cuenta en un proveedor de OpenID determinado, suponiendo que el proveedor de OpenID sea confiable para la aplicación?
Algunas suposiciones que se pueden hacer:
- Los identificadores de los usuarios son todas las URL https que apuntan al proveedor de OpenID, que responde negativamente a las solicitudes de descubrimiento de cuentas desconocidas.
- Todas las conexiones a las aplicaciones y al proveedor de OpenID están protegidas por HTTPS (HTTP será redirigido).
Mi idea es simplemente verificar el identificador cuando se produce un intento de inicio de sesión y asegurarse de que sea una URL para ese único proveedor de OpenID de confianza. Debido a que OpenID incluye el paso de descubrimiento, que se ejecuta siempre , la parte que confía enviará una solicitud al servidor OpenID de confianza, que responderá con información de descubrimiento si existe el usuario, o un error, que permite el descubrimiento y, por lo tanto, falla la autenticación.
Debido a que todo pasa por HTTPS, la parte que confía también puede estar segura de que la solicitud a la URL de identidad irá al servidor correcto.
¿Funciona mi enfoque? ¿O alguien sabe una mejor manera de restringir los proveedores aceptados?