Estoy trabajando en una "prueba de concepto" de un servicio central de autenticación (no CAS). Mi comprensión de lo que debo hacer tiene agujeros y me preocupa que el "protocolo" no sea seguro.
Por qué / Qué
Los usuarios deben aterrizar en un servidor de autenticación central que realiza la verificación, creación y cambio de credenciales. Una vez verificado, el usuario será autorizado para su subdominio correcto y ningún otro. P.ej. El cliente Foo tiene varios empleados. Todos los empleados inician sesión a través del servidor central y luego se envían al subdominio de Foo. Los subdominios son para aislar grandes clientes y para equilibrar la carga bruta.
Cómo
Es operar como tal:
- El usuario aterriza en
https://www.example.com/login
- El usuario proporciona el nombre de usuario, la contraseña y el subdominio (por ejemplo,
foo
) - el servicio central de autenticación verifica las credenciales
- La respuesta contiene
sig
(y una marca de tiempo ??) - El usuario construye una solicitud
POST
ahttps://foo.example.com/login
con datos relevantes, que se describen más adelante.
Firma
donde sig
se construye de esta manera:
El documento que se firmará es el ID del usuario y una marca de hora en formato
yyyyMMddHHmmss
unidas con una coma. Por ejemplo, para el ID 55555 y la marca de tiempo 20140620132430, la cadena del documento es55555,20140620132430
.
El servidor central firma los documentos con su clave privada. Cada subdominio tiene la clave pública correspondiente para que puedan verificar que el firmante era el servidor central.
POST
Data
Los datos relevantes pasados al servicio de inicio de sesión (o autenticación ??) del subdominio serían:
- ID de usuario
- marca de tiempo para el tiempo de generación de la solicitud. Verificado por el receptor para ser actual.
- Sitio (subdominio)
-
sig
(codificado en base64, no estoy seguro de por qué es importante ...).
No me queda claro si el cliente / usuario es el que construye el POST
para el subdominio. El servidor central de autenticación tendría, por supuesto, todos los datos relevantes para enviar al subdominio y podría construir el POST
en sí. Luego tengo que lidiar con cómo hacer que el usuario llegue al subdominio correcto con el token o cookie correcto o algo así.
Preguntas
-
¿Esto equivale a "rodar mi propio" protocolo de autenticación?
-
¿Un protocolo estándar existente cubrirá mi caso de uso?
-
¿Qué hay de malo en lo anterior? Sigo pensando que todo está mal, que es una respuesta potencialmente mala a la pregunta incorrecta; que deberíamos repensar para qué estamos tratando de usar subdominios.
-
Si la idea básica es sólida, ¿me estoy perdiendo algo? ¿O cualquier otra cosa necesita una aclaración?