arquitectura ssido
La arquitectura SSIDO está compuesta por una aplicación del lado del servidor (Parte de confianza) y componentes del lado del cliente, como se muestra en la figura siguiente.
El cliente SSIDO consta de dos componentes:
El agente de usuario (normalmente un navegador web) es un cliente que solicita alguna página web protegida.
SSI Authenticator es una aplicación móvil de agente perimetral o una aplicación de escritorio del lado del cliente que responde a los reclamos de autenticación de Access Controller utilizando la billetera SSI.
El servidor SSIDO consta de dos módulos:
Access Controller es una aplicación del lado del servidor que organiza el proceso de autenticación. Establece y gestiona una conexión HTTP (S) con el agente de usuario y una conexión WebSocket con SSI Authenticator.
SSI Validator es una biblioteca que valida el DID del usuario a través del SSI DPKI y ejecuta operaciones criptográficas necesarias.
PROTOCOLO ssido
La secuencia de autenticación se muestra en el diagrama siguiente.
DIAGRAMA DE LA SECUENCIA DE AUTENTICACIÓN.
- El usuario a través del User Agent solicita alguna página web protegida.
- Una vez que se ha recibido la solicitud, el Controlador de Acceso establece una conexión WebSocket con el Agente de Usuario. El Controlador de Acceso almacena el ID de sesión establecido y responde al agente de usuario enviando un código QR de validación. El código QR contiene la URL de autenticación, la identificación de sesión establecida y, opcionalmente, otra información relevante.
- El usuario utiliza la aplicación de edge-agent para leer el código QR recibido y envía el DID del usuario al servidor.
- La aplicación del lado del servidor recibe el DID del usuario y recupera la clave pública correspondiente del Documento DID almacenado en el libro mayor SSI. El Validador SSI verifica que las credenciales de usuario no se revoquen.
- Si el Controlador de Usuario no existe, la aplicación del lado del servidor lo crea.
- El validador SSI genera un desafío aleatorio junto con otros parámetros de acuerdo con la lógica empresarial y la configuración de la aplicación.
- Si el DID del usuario ya está almacenado en la base de datos, la aplicación lo usa para buscar las credenciales del usuario.
- Las credenciales de usuario recuperadas se utilizan para completar las Credenciales de exclusión y permitir los parámetros de Credenciales.
- El validador SSI devuelve la solicitud http. El Controlador de Acceso almacena la solicitud en el almacenamiento temporal.
- La aplicación del agente perimetral (SSI Authenticator) recibe la solicitud y verifica el DID del servidor mediante el SSI Ledger.
- El Autenticador SSI confirma la operación y el usuario devuelve la respuesta con el objeto Credencial de clave pública al servidor.
- El Controlador de Acceso del lado del servidor recupera la solicitud inicial del almacenamiento temporal y pasa tanto la solicitud como la respuesta al validador SSI para generar una respuesta.
- El Validador SSI verifica todos los parámetros de respuesta necesarios, como desafío, origen, etc.
- El Validador SSI busca la clave pública de la credencial nombrada por response.id.
- El Controlador de Acceso obtiene la clave pública de usuario del SSI Ledger.
- El Controlador de Acceso aplica la clave pública del usuario para verificar la firma de autenticación.
- La aplicación devuelve los resultados de la ceremonia en forma de un objeto POJO que incluye el DID, el nombre de usuario y el identificador, la identificación de la credencial y el nuevo contador de firmas para la credencial.
- El Validador SSI verifica los resultados de la ceremonia de autenticación y ejecuta una acción apropiada.
- En el caso de una autenticación fallida, se envía un informe de error al usuario.
- En el caso de una autenticación exitosa, el validador del lado del servidor actualiza el contador de firmas en la base de datos de usuarios.
- Finalmente, el validador del lado del servidor recupera el ID de sesión almacenado (Punto 2) para enviar una respuesta que permite al Agente de Usuario redirigir a la página solicitada.

