Cliente del Módulo Común de Autenticación - Gobierno del ...
Cliente del Módulo Común de Autenticación - Gobierno del ...
Cliente del Módulo Común de Autenticación - Gobierno del ...
Create successful ePaper yourself
Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
Tabla <strong>de</strong> contenidos<br />
Introducción ...................................................................................................................... 1<br />
Pasos previos ..................................................................................................................... 2<br />
Arquitectura <strong><strong>de</strong>l</strong> <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> ................................................................... 2<br />
<strong>Módulo</strong>s <strong>de</strong> Login JAAS ..................................................................................................... 2<br />
<strong>Módulo</strong> Standalone ..................................................................................................... 2<br />
<strong>Módulo</strong> Corporativo .................................................................................................... 4<br />
Gestión <strong>de</strong> Errores .............................................................................................................. 6<br />
Definición <strong><strong>de</strong>l</strong> ExceptionHandler a utilizar. .............................................................. 6<br />
Operaciones a ejecutar ante un error .............................................................................. 6<br />
Gestión <strong>de</strong> excepciones estándar. ................................................................................... 7<br />
Canales <strong>de</strong> Acceso .............................................................................................................. 7<br />
Datos <strong>de</strong> usuario suministrados por el módulo ......................................................................... 8<br />
Usuarios <strong>de</strong> tipo “Empleado Público” ............................................................................ 9<br />
Usuarios <strong>de</strong> tipo “Ciudadano” ...................................................................................... 9<br />
Usuarios <strong>de</strong> tipo “Colaborador” .................................................................................... 9<br />
Constantes ......................................................................................................................... 9<br />
Detalle <strong>de</strong> escenarios ......................................................................................................... 14<br />
Ciudadano ............................................................................................................... 15<br />
Empleado publico ..................................................................................................... 15<br />
Colaborador ............................................................................................................. 15<br />
glosario ........................................................................................................................... 15<br />
A. Principals <strong>de</strong> cada escenario ..................................................................................... 17<br />
Introducción<br />
El <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> es el sistema back-end que facilita la autenticación <strong>de</strong> usuarios, <strong>de</strong><br />
forma transparente, contra todos los sistemas <strong>de</strong> datos manejados por el Principado <strong>de</strong> Asturias.<br />
El <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> actúa como un intermediario (un sistema fachada) evitando a las<br />
aplicaciones la comunicación con múltiples sistemas y la manipulación <strong>de</strong> datos heterogéneos.<br />
Figura 1. Esquema <strong><strong>de</strong>l</strong> <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong><br />
La comunicación entre las aplicaciones y el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> se realiza a través <strong>de</strong> un<br />
servicio web: authService. Para facilitar el acceso a este servicio, en la distribución <strong><strong>de</strong>l</strong> FW-PA se incluye<br />
una librería: security-client.jar.<br />
El cliente para el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> se integra con el sistema <strong>de</strong> autenticación <strong><strong>de</strong>l</strong> FW-<br />
PA (con el Filtro <strong>de</strong> Seguridad), a través <strong>de</strong> un módulo JAAS (ver apartado Seguridad en el Manual<br />
<strong>de</strong> Desarrollo <strong>de</strong> Aplicaciones J2EE <strong><strong>de</strong>l</strong> FW-PA).<br />
1
Pasos previos<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
Antes <strong>de</strong> po<strong>de</strong>r utilizar el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> , se necesita:<br />
1. Solicitar la URL <strong><strong>de</strong>l</strong> servicio web <strong><strong>de</strong>l</strong> <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
2. Dar <strong>de</strong> alta la aplicación a <strong>de</strong>sarrollar en la base <strong>de</strong> datos <strong><strong>de</strong>l</strong> <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
3. Cargar los roles <strong>de</strong> la aplicación y asignarlos a los usuarios que sean convenientes.<br />
Arquitectura <strong><strong>de</strong>l</strong> <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong><br />
<strong>Autenticación</strong><br />
El <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> permite realizar la autenticación <strong>de</strong> usuarios para cualquier aplicación<br />
que se utilice en el Principado <strong>de</strong> Asturias. Esencialmente, los tipos <strong>de</strong> usuarios que se pue<strong>de</strong>n autenticar<br />
son: Empleados <strong>de</strong> la administración (o <strong>de</strong> entida<strong>de</strong>s colaboradoras) y Ciudadanos. En función <strong><strong>de</strong>l</strong> tipo <strong>de</strong><br />
usuario que acceda a la aplicación, el proceso <strong>de</strong> autenticación (datos necesarios y datos <strong>de</strong>vueltos) será<br />
diferente. Otros parámetros que también se tendrán en cuenta son: nivel <strong>de</strong> seguridad y canal <strong>de</strong> acceso.<br />
Figura 2. Conexión con el <strong>Módulo</strong> <strong>Común</strong> <strong>Autenticación</strong><br />
La comunicación con el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> (a través <strong><strong>de</strong>l</strong> servicio web <strong><strong>de</strong>l</strong> mismo), se realiza<br />
mediante el <strong>Módulo</strong> <strong>de</strong> Login (JAAS LoginModule): PrincastCorporativeLoginModule.<br />
Este módulo se encargará <strong>de</strong> enviar los datos <strong>de</strong> autenticación al <strong>Módulo</strong> <strong>Común</strong> y recibir la respuesta<br />
a<strong>de</strong>cuada. Esta respuesta pue<strong>de</strong> ser un error (excepción <strong>de</strong> tipo JAAS LoginException) si no se pudo<br />
autenticar correctamente al usuario, o un conjunto <strong>de</strong> datos (JAAS Principal) <strong><strong>de</strong>l</strong> usuario, entre los<br />
que se incluyen: i<strong>de</strong>ntificador principal, datos personales <strong>de</strong> carácter general, roles, etc.<br />
<strong>Módulo</strong>s <strong>de</strong> Login JAAS<br />
La conexión <strong>de</strong> una aplicación con el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> se realiza, <strong>de</strong> forma <strong>de</strong>clarativa,<br />
a través <strong>de</strong> la configuración JAAS. Para ello, basta con <strong>de</strong>finir, en el fichero jaas-config.xml<br />
una entrada que configure a<strong>de</strong>cuadamente el módulo a utilizar (ver apartado “Seguridad” en Manual <strong>de</strong><br />
Desarrollo <strong>de</strong> aplicaciones J2EE <strong><strong>de</strong>l</strong> FW-PA). En la librería security-client.jar se incluyen dos<br />
módulos <strong>de</strong> login: el módulo corporativo (PrincastCorporativeLoginModule) que da acceso<br />
al <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> y un módulo simulador (PrincastStandaloneLoginModule)<br />
que permite trabajar contra un fichero <strong>de</strong> datos XML.<br />
<strong>Módulo</strong> Standalone<br />
Aquellas aplicaciones con necesida<strong>de</strong>s <strong>de</strong> seguridad, que no dispongan <strong>de</strong> conectividad con los back-ends<br />
<strong><strong>de</strong>l</strong> Principado <strong>de</strong> Asturias, en concreto con el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>, pue<strong>de</strong>n utilizar el módulo<br />
<strong>de</strong> autenticación standalone, basado en un fichero <strong>de</strong> permisos.<br />
jaas-<br />
Como cualquier otro módulo JAAS, el módulo standalone se configura en el fichero<br />
config.xml.<br />
<br />
<br />
es.princast.framework.modules.security.standalone.StandaloneLoginModule
<br />
USERS.FILE<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
WEB-INF/authorized-users.xml<br />
<br />
<br />
NO.CACHING<br />
false<br />
<br />
<br />
ENCODED.PASSWORDS<br />
false<br />
<br />
…<br />
Para configurar un módulo Standalone , es importante tener en cuenta:<br />
1. La clase <strong><strong>de</strong>l</strong> módulo es:<br />
es.princast.framework.modules.security.standalone.StandaloneLoginModule.<br />
2. Se <strong>de</strong>be indicar la ubicación <strong><strong>de</strong>l</strong> fichero <strong>de</strong> usuarios. Este fichero se configura bajo la opción <strong>de</strong><br />
nombre: USERS.FILE. Des<strong>de</strong> la versión 1.5 <strong><strong>de</strong>l</strong> FW-PA, el path <strong>de</strong> este fichero se resuelve <strong>de</strong> forma<br />
automática utilizando la clase PrincastPathResolver.<br />
3. Por <strong>de</strong>fecto, el módulo utiliza una caché para evitar releer el fichero <strong>de</strong> usuarios en cada acceso. Es<br />
posible <strong>de</strong>shabilitar esta caché (aunque no recomendable por motivos <strong>de</strong> eficiencia) configurando con<br />
el valor true la opción: NO.CACHING.<br />
4. Las contraseñas, en el fichero <strong>de</strong> usuarios, se pue<strong>de</strong>n escribir en plano o encriptadas. Para que el<br />
módulo pueda trabajar con contraseñas encriptadas, se <strong>de</strong>be configurar con el valor true la opción<br />
ENCODED.PASSWORDS. Las contraseñas <strong>de</strong>ben estar encriptadas con el algoritmo SHA1 y una fuerza<br />
<strong>de</strong> cifrado <strong>de</strong> 160 bits.<br />
Authorized-users.xml<br />
A partir <strong>de</strong> la versión 1.5 <strong><strong>de</strong>l</strong> FW-PA la sintaxis <strong><strong>de</strong>l</strong> fichero authorized-users.xml cambia, no se<br />
mantiene la compatibilidad hacia atrás con versiones anteriores <strong><strong>de</strong>l</strong> fichero. En el fichero <strong>de</strong> usuarios se<br />
incluirán los datos <strong>de</strong> todos los usuarios que se autenticarán correctamente en la aplicación, junto con sus<br />
cre<strong>de</strong>nciales, principals, roles y dominios.<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
<br />
<br />
<br />
<br />
<br />
Se escribirá una etiqueta por cada uno <strong>de</strong> los usuarios. En dicha etiqueta se indicará el tipo <strong>de</strong><br />
actor, su nombre <strong>de</strong> usuario y su contraseña.<br />
Bajo la etiqueta se <strong>de</strong>tallará cualquier dato relevante acerca <strong><strong>de</strong>l</strong> usuario (nombre,<br />
apellidos, dni, etc.), en el ejemplo superior, para los nombres <strong>de</strong> los principals se han utilizado constantes<br />
<strong>de</strong> la clase SecurityConstants, <strong>de</strong> tal forma que los datos <strong>de</strong>vueltos por este modulo son 100%<br />
compatibles con los que podría <strong>de</strong>volver el modulo corporativo (<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> Usuarios), aunque esto<br />
no es obligatorio, se pue<strong>de</strong> utilizar cualquier nombre o valor para los principals. Uno <strong>de</strong> los principals pue<strong>de</strong><br />
ser marcado como i<strong>de</strong>ntificador principal <strong><strong>de</strong>l</strong> usuario, si no se marca ninguno, se utilizará el username.<br />
Por último, se enumerarán todos los roles <strong><strong>de</strong>l</strong> usuario, utilizando al etiqueta . Dentro <strong>de</strong> cada<br />
rol se especifican los dominios con el elemento , son agrupaciones lógicas <strong>de</strong> roles,<br />
por ejemplo un dominio pue<strong>de</strong> ser todos los usuarios <strong>de</strong> la oficina <strong>de</strong> comarcal <strong>de</strong> Oviedo. El atributo<br />
procedure indica si un grupo es un procedimiento, esto sirve para las aplicaciones <strong>de</strong> tramitación, don<strong>de</strong><br />
es necesario saber los procedimientos que tiene cada usuario y se mo<strong><strong>de</strong>l</strong>an mediante dominios con el<br />
atributo procedure="yes" (por <strong>de</strong>fecto tiene valor a no).<br />
ExceptionHandler<br />
Junto con el modulo standalone se suministra un ExceptionHanl<strong>de</strong>r específico:<br />
es.princast.framework.modules.security.<br />
standalone.exceptions.SecurityExceptionHandler. Para más información al respecto,<br />
véase el apartado siguiente: “Gestión <strong>de</strong> Errores”.<br />
<strong>Módulo</strong> Corporativo<br />
El módulo <strong>de</strong> login corporativo es un módulo JAAS (LoginModule) que ejecuta las tareas <strong>de</strong><br />
autenticación contra el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>, utilizando el servicio web authService.<br />
Para utilizar este módulo, basta con escribir una entrada en el fichero jaas-config.xml para su<br />
configuración:<br />
<br />
<br />
es.princast.framework.modules.security.corp.client.PrincastCorporativeLog<br />
<br />
<br />
wsURL<br />
http://@wsurl.host@:@wsurl.port@/Auth12F/authService<br />
<br />
<br />
canal-prompt<br />
tipo_acceso<br />
<br />
<br />
cliente-ip-prompt<br />
ip_cliente<br />
<br />
4
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
tipo-persona-prompt<br />
tipo_persona<br />
<br />
<br />
nif-prompt<br />
nif<br />
<br />
<br />
cif-prompt<br />
cif<br />
<br />
<br />
persona-fisica-id<br />
F<br />
<br />
<br />
persona-juridica-id<br />
J<br />
<br />
<br />
canal-web-id<br />
web<br />
<br />
<br />
canal-certificado-id<br />
web<br />
<br />
<br />
canal-telefonico-id<br />
telefonico<br />
<br />
<br />
canal-presencial-id<br />
presencial<br />
<br />
<br />
<br />
<br />
Los puntos más importantes <strong>de</strong> esta configuración son:<br />
1. El nombre <strong>de</strong> la clase <strong><strong>de</strong>l</strong> módulo <strong>de</strong> login es:<br />
es.princast.framework.modules.security.corp.client.PrincastCorporativeLoginModule<br />
2. Bajo la opción wsURL <strong>de</strong>be <strong>de</strong>finirse la dirección <strong><strong>de</strong>l</strong> servicio web authService.<br />
3. El resto <strong>de</strong> opciones indican los nombres <strong>de</strong> parámetros <strong>de</strong> request bajo los que se suministrarán datos<br />
<strong><strong>de</strong>l</strong> usuario a autenticar. Es conveniente copiar estos mismos valores.<br />
Atención<br />
Es importante que en la aplicación, bajo el parámetro <strong>de</strong> configuración: app-config, se <strong>de</strong>fina<br />
el mismo valor que el indicado en el atributo “ name” <strong>de</strong> la configuración JAAS. En este ejemplo:<br />
USERMGMT.<br />
5
ExceptionHandler<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
Junto con el modulo standalone se suministra un ExceptionHanl<strong>de</strong>r específico:<br />
es.princast.framework.modules.security.corp.exceptions.SecurityExceptionHandler.<br />
Para más información al respecto, véase el apartado siguiente: “Gestión <strong>de</strong> Errores”.<br />
Gestión <strong>de</strong> Errores<br />
Si, por cualquier motivo, en el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>, o en el propio LoginModule JAAS,<br />
se produce un error, éste será transmitido, en forma <strong>de</strong> una excepción, al Filtro <strong>de</strong> Seguridad. Finalmente,<br />
existe un componente llamado ExceptionHandler que se encargará <strong>de</strong> redirigir al usuario a la página<br />
a<strong>de</strong>cuada, en función <strong><strong>de</strong>l</strong> tipo <strong>de</strong> error.<br />
Figura 3. Gestión <strong>de</strong> Errores <strong>de</strong> <strong>Autenticación</strong><br />
Definición <strong><strong>de</strong>l</strong> ExceptionHandler a utilizar.<br />
Para <strong>de</strong>finir que gestor <strong>de</strong> excepciones se quiere utilizar basta con, en cualquier módulo <strong>de</strong> configuración<br />
registrado para el contexto SECURITY, <strong>de</strong>finir la propiedad: “EXCEPTION.HANDLER”. El valor <strong>de</strong> esta<br />
propiedad será el nombre, completamente cualificado, <strong><strong>de</strong>l</strong> gestor <strong>de</strong> excepciones.<br />
Si no se <strong>de</strong>fine un gestor <strong>de</strong> excepciones, se utilizará el gestor por <strong>de</strong>fecto:<br />
es.princast.framework.modules.security.common.exceptions.StandardExceptionHandler.<br />
Los gestores <strong>de</strong> excepciones específicos, suministrados con los dos módulos <strong>de</strong> login: corporativo y<br />
standalone, son compatibles con el módulo estándar.<br />
Operaciones a ejecutar ante un error<br />
Cuando se produce un error, las posibles redirecciones que pue<strong>de</strong> hacer el Gestor <strong>de</strong> Excepciones Estándar<br />
son:<br />
• Redirigir a página <strong>de</strong> “login”. Supone la redirección a una página en la que se solicita el par usuario/<br />
contraseña o cualquier otra información que pudiera ser necesaria para autenticar.<br />
• Redirigir a página <strong>de</strong> “no login”. Supone la redirección a una página en la que se informa <strong>de</strong> que<br />
la autenticación anterior no tuvo éxito. Generalmente se indicará el motivo <strong><strong>de</strong>l</strong> error y se solicitarán los<br />
datos que sean necesarios para un nuevo intento.<br />
• Redirigir a página <strong>de</strong> “no roles”. Supone que el usuario se ha autenticado correctamente pero que<br />
no tiene privilegio suficiente para acce<strong>de</strong>r a un <strong>de</strong>terminado recurso.<br />
• Redirección a página <strong>de</strong> cambio <strong>de</strong> contraseña. Si la contraseña suministrada es correcta, pero ha<br />
expirado, se pue<strong>de</strong> forzar al usuario a que la actualice.<br />
• Redirección a página <strong>de</strong> error general. Si la situación <strong>de</strong> error es distinta <strong>de</strong> las anteriores, se redirecciona<br />
a una página <strong>de</strong> error.<br />
Todas estas redirecciones se <strong>de</strong>finen en el fichero “ princast-security-rules.xml ”, utilizando<br />
las etiquetas “ ”. Si, por alguna razón, no se ha <strong>de</strong>finido una página específica para tratar<br />
una situación concreta, en ese caso, la redirección se hará sobre la página <strong>de</strong> error. Si no se ha <strong>de</strong>finido<br />
tampoco una página <strong>de</strong> error general, se enviará un código http <strong>de</strong> error: 515 .<br />
6
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
Gestión <strong>de</strong> excepciones estándar.<br />
Las excepciones que pue<strong>de</strong> controlar el gestor estándar, junto a las operaciones a realizar en cada uno <strong>de</strong><br />
los casos son las que se indican en la siguiente tabla:<br />
Tabla 1. Tabla <strong>de</strong> excepciones <strong>de</strong> login<br />
Tipo Excepción Se dispara cuando... Operación a ejecutar...<br />
WrongProxiedUserI<strong>de</strong>ntification Se autentica a un par tramitador/<br />
ciudadano y falla la autenticación<br />
<strong><strong>de</strong>l</strong> tramitador.<br />
InsufficientDataException Falta algún dato necesario para la<br />
autenticación<br />
WrongPasswordException<br />
RequiredPasswordException Primer intento <strong>de</strong> acceso a un<br />
recurso protegido<br />
UnknownUserException Usuario (username)<br />
<strong>de</strong>sconocido.<br />
X509CertificateExpectedException<br />
Requerido certificado digital <strong>de</strong><br />
cliente.<br />
InsufficientPrivilegesException El usuario está autenticado<br />
pero no autorizado. No tiene<br />
privilegios suficientes para<br />
acce<strong>de</strong>r al recurso.<br />
RandomPwdPosRequiredException Se requiere una autenticación por<br />
posiciones <strong>de</strong> contraseña.<br />
Redirecciona al forward: “nologin”.<br />
Redirecciona al forward: “nologin”.<br />
Error en el par usuario/contraseña Redirecciona al forward: “nologin”.<br />
Redirecciona al forward:<br />
“login”.<br />
Redirecciona al forward:<br />
“login”.<br />
Redirecciona a la IP y/o puerto <strong>de</strong><br />
certificado digital (SSL-3)<br />
Redirecciona al forward: “noroles”.<br />
Redirecciona al forward:<br />
“login”.<br />
LoginException Error <strong>de</strong> autenticación general. Redirecciona al forward:<br />
“error”.<br />
UnmanagedLoginException Error incontrolado en el proceso<br />
<strong>de</strong> autenticación.<br />
LoginWarning<br />
Canales <strong>de</strong> Acceso<br />
Situación anómala en el proceso<br />
<strong>de</strong> login.<br />
Redirecciona al forward:<br />
“error”.<br />
Si el warning # “Password<br />
Expired”, redirecciona a forward:<br />
“change-password”<br />
El “Canal <strong>de</strong> Acceso” <strong>de</strong>fine el medio por el que un usuario acce<strong>de</strong> a un recurso protegido. En la mayoría<br />
<strong>de</strong> los casos, este canal, será el “canal web”, aunque, es posible que el acceso se realice intermediado<br />
a través <strong>de</strong> un tramitador presencial o telefónico.<br />
El canal <strong>de</strong> acceso que se está utilizando se indicará, al <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong> , utilizando el<br />
parámetro http “ tipo_acceso ”. De momento, se <strong>de</strong>finen tres canales <strong>de</strong> acceso posibles:<br />
Canal web<br />
Es el canal <strong>de</strong> acceso por <strong>de</strong>fecto. Supone que el usuario está entrando a la<br />
aplicación a través <strong>de</strong> una página <strong>de</strong> la propia aplicación. Se supondrá que se<br />
acce<strong>de</strong> a través <strong>de</strong> este canal cuando no exista en la petición http el parámetro<br />
“tipo_acceso”, o bien, cuando éste valga la constante “web”. Para este<br />
canal, se permiten los niveles <strong>de</strong> seguridad 0, 1 y 2 si el actor es un ciudadano<br />
7
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
(ACTOR <strong>Módulo</strong> = <strong>Común</strong> “CITIZEN” <strong>de</strong> <strong>Autenticación</strong>.<br />
princast-security-rules.xml), o<br />
niveles 0 y 1 si el actor es un empleado público (ACTOR = “EMPLOYEE” en<br />
princast-security-rules.xml)<br />
Canal Telefónico<br />
Canal Presencial<br />
Este canal se utiliza para accesos intermediados a través <strong>de</strong> un sistema CRM<br />
( Siebel) proce<strong>de</strong>ntes <strong>de</strong> un call center. Para indicar el uso <strong>de</strong> este canal,<br />
se utilizará el parámetro “ tipo_acceso”, con el valor “telefonico”.<br />
Únicamente se permite tipo actor Ciudadano y niveles <strong>de</strong> seguridad 0 y 1.<br />
Este canal es idéntico al anterior, con la salvedad <strong>de</strong> que el acceso proce<strong>de</strong> <strong>de</strong><br />
una oficina <strong>de</strong> atención presencial y no <strong>de</strong> un call center. Se utilizará el valor<br />
“presencial” para el parámetro “ tipo_acceso”. Únicamente se permite<br />
tipo <strong>de</strong> actor Ciudadano y el nivel <strong>de</strong> seguridad 2.<br />
El acceso a una aplicación a través <strong><strong>de</strong>l</strong> canal web se pue<strong>de</strong> realizar <strong>de</strong>s<strong>de</strong> cualquier or<strong>de</strong>nador conectado<br />
a la red, sin embargo, el acceso a través <strong>de</strong> los canales intermediados (telefónico y presencial) únicamente<br />
se pue<strong>de</strong> hacer <strong>de</strong>s<strong>de</strong> <strong>de</strong>terminados or<strong>de</strong>nadores cuyas IPs sean reconocidas por el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong><br />
<strong>Autenticación</strong> .<br />
Por lo tanto, es necesario, si se quieren utilizar estos canales, dar <strong>de</strong> alta en el <strong>Módulo</strong> <strong>Común</strong> <strong>de</strong><br />
<strong>Autenticación</strong>, todas las IPs que van a tener acceso a la aplicación (y el canal que pue<strong>de</strong>n utilizar).<br />
Datos <strong>de</strong> usuario suministrados por el módulo<br />
Si el proceso <strong>de</strong> login se realiza con éxito, y el módulo pue<strong>de</strong> autenticar correctamente al usuario,<br />
se <strong>de</strong>volverán, en forma <strong>de</strong> Principals JAAS, un conjunto <strong>de</strong> datos recabados acerca <strong><strong>de</strong>l</strong> usuario.<br />
Estos datos se ponen a disposición <strong>de</strong> la aplicación a través <strong>de</strong> los mecanismos <strong>de</strong> seguridad J2EE<br />
estándar y a través <strong><strong>de</strong>l</strong> objeto JAAS Subject, alamacenado en el scope http Session, bajo la clave<br />
SecurityGlobals.SUBJECT.<br />
Los PrincipalsJAAS que se cargan al autenticar a un usuario son:<br />
I<strong>de</strong>ntificador <strong><strong>de</strong>l</strong> Usuario<br />
(PrincastI<strong>de</strong>ntifier)<br />
Se trata <strong><strong>de</strong>l</strong> i<strong>de</strong>ntificador único <strong><strong>de</strong>l</strong> usuario. Este valor<br />
será el que se obtenga cuando se ejecute el método<br />
request.getUserPrincipal(). En todos los tipos <strong>de</strong> escenario,<br />
este valor será el NIF <strong><strong>de</strong>l</strong> usuario.<br />
Datos personales<br />
Se trata <strong>de</strong> un mapa <strong>de</strong> datos personales. En <strong>de</strong>terminados<br />
(PrincastCompositePrincipal) escenarios (Colaborador) se pue<strong>de</strong> <strong>de</strong>volver más <strong>de</strong> un objeto<br />
<strong>de</strong> este tipo, aunque lo habitual es que haya sólo uno.<br />
Roles (PrincastRole)<br />
Dominios (PrincastDomain)<br />
Warnings (PrincastWarning)<br />
Información <strong>de</strong> escenario<br />
(ScenarioPrincipal)<br />
I<strong>de</strong>ntifica el rol que tiene el usuario. Es habitual que se <strong>de</strong>vuelva<br />
más <strong>de</strong> un objeto <strong>de</strong> este tipo.<br />
I<strong>de</strong>ntifica los dominios <strong>de</strong> un usuario. Pue<strong>de</strong>n ser <strong>de</strong> dos tipos<br />
dominios puros, es <strong>de</strong>cir agrupaciones <strong>de</strong> usuarios (procedure=no).<br />
O procedimientos, que son tipos <strong>de</strong> tramites que pue<strong>de</strong> hacer el<br />
usuario (procedure=yes)<br />
Se pue<strong>de</strong>n incluir warnings si se da una situación anómala en el<br />
proceso <strong>de</strong> autenticación. Por ejemplo, la contraseña está caducada.<br />
Incluye informaciónd e carácter general acerca <strong><strong>de</strong>l</strong> escenario <strong>de</strong><br />
autenticación utilizado. Los datos que <strong>de</strong>vuelve son: nivel <strong>de</strong><br />
seguridad, canal <strong>de</strong> acceso, tipo <strong>de</strong> actor, etc.<br />
8
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
En general los datos que se <strong>de</strong>vuelven <strong>Módulo</strong> <strong>Común</strong> como resultado <strong>de</strong> <strong>Autenticación</strong>. <strong><strong>de</strong>l</strong> proceso <strong>de</strong> autenticación <strong>de</strong>pen<strong>de</strong>n <strong><strong>de</strong>l</strong> tipo <strong>de</strong><br />
actor que se esté autenticando. Los datos concretos, en función <strong><strong>de</strong>l</strong> tipo <strong>de</strong> actor son:<br />
Usuarios <strong>de</strong> tipo “Empleado Público”<br />
Los usuarios <strong>de</strong> este tipo únicamente pue<strong>de</strong>n autenticarse en los niveles <strong>de</strong> seguridad 0 y 1. Los empleados<br />
públicos siempre se autorizan con su nombre <strong>de</strong> usuario y su contraseña.<br />
De un empleado público se mantienen los siguientes datos personales: NIF (será el i<strong>de</strong>ntificador principal),<br />
nombre, apellidos, unida<strong>de</strong>s organizativas a las que pertenece y una lista <strong>de</strong> roles que posee.<br />
Cuando un empleado se autentica correctamente, las aplicaciones podrán obtener <strong>de</strong> la sesión, a través <strong><strong>de</strong>l</strong><br />
Subject, (ver apartado anterior) todos sus datos (en el caso <strong>de</strong> los roles solamente se podrán leer los<br />
roles <strong><strong>de</strong>l</strong> empleado en la aplicación en la que se autentica). Los actores <strong>de</strong> este tipo, tendrán siempre, por<br />
<strong>de</strong>fecto, el rol “Empleado”.<br />
Usuarios <strong>de</strong> tipo “Ciudadano”<br />
Los ciudadanos pue<strong>de</strong>n autenticarse en cualquiera <strong>de</strong> los tres niveles <strong>de</strong> seguridad (0, 1 ó 2), es <strong>de</strong>cir, se<br />
pue<strong>de</strong> proteger un recurso (en el fichero princast-security-rules.xml) con usuario/contraseña<br />
y/o con certificado digital (siempre y cuando sean ciudadanos los que van a acce<strong>de</strong>r a dicho recurso).<br />
Una vez autenticado el ciudadano, se ofrecerá a la aplicación (a través <strong><strong>de</strong>l</strong> Subject) los siguientes datos<br />
personales: NIF (como i<strong>de</strong>ntificador principal), nombre, apellidos, unida<strong>de</strong>s organizativas (asociadas al<br />
ciudadano en la aplicación, pue<strong>de</strong>n ser varias), roles y, opcionalmente, otros datos que se obtengan en<br />
el proceso (i<strong>de</strong>ntificador <strong>de</strong> tercero, etc.). Los actores <strong>de</strong> este tipo, tendrán siempre, por <strong>de</strong>fecto, el rol<br />
“Ciudadano”.<br />
Usuarios <strong>de</strong> tipo “Colaborador”<br />
Los colaboradores se pue<strong>de</strong>n i<strong>de</strong>ntificar únicamente en los niveles <strong>de</strong> seguridad 0 y 1. La autenticación <strong>de</strong><br />
un colabora-dor es siempre un proceso <strong>de</strong> login múltiple. En una sola operación, se autenticará al propio<br />
colaborador y al ciudadano al que representa. La autenticación se realiza con par usuario/contraseña para<br />
el colaborador y con par NIF/posiciones <strong>de</strong> contraseña ó CIF/posiciones <strong>de</strong> contraseña.<br />
Al autenticar correctamente a un colaborador se reciben dos juegos <strong>de</strong> datos personales (dos instancias<br />
<strong><strong>de</strong>l</strong> Principal: PrincastCompositePrincipal), uno que contiene los datos <strong><strong>de</strong>l</strong> tramitador y<br />
otro que contiene los datos <strong><strong>de</strong>l</strong> ciudadano. Estos dos Principals se distinguen por el valor almacenado<br />
bajo la entrada: SecurityConstants.AUTHENTIFIED_USER_TYPE(recor<strong>de</strong>mos que este tipo <strong>de</strong><br />
Principals son mapas <strong>de</strong> valores). Si el Principalcontiene datos <strong><strong>de</strong>l</strong> tramitador (une empleado),<br />
el valor <strong>de</strong> este parámetro será: SecurityConstants.AGENT_USER_TYPE y si contiene datos <strong><strong>de</strong>l</strong><br />
ciudadano: SecurityConstants.CITIZEN_USER_TYPE.<br />
Los roles en este tipo <strong>de</strong> actor serán el superconjunto <strong>de</strong> los roles <strong><strong>de</strong>l</strong> ciudadano y <strong><strong>de</strong>l</strong> tramitador<br />
(empleado).<br />
Constantes<br />
Los datos personales, tanto <strong>de</strong> empleados como <strong>de</strong> ciudadanos, ofrecen a la aplicación como objetos <strong>de</strong> tipo<br />
PrincastCompositePrincipal. Estos objetos son mapas <strong>de</strong> valores, en los cuales, cada entrada<br />
contiene un dato concreto <strong>de</strong> usuario. Los datos concretos que un principal <strong>de</strong> estas características pue<strong>de</strong><br />
tener son los siguientes:<br />
/**<br />
9
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
* Clave que i<strong>de</strong>ntifica <strong>Módulo</strong> el <strong>Común</strong> protocolo <strong>de</strong> <strong>Autenticación</strong>. <strong>de</strong> acceso a un recurso<br />
*/<br />
public static final String PROTOCOL = "PROTOCOL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica i<strong>de</strong>ntificadores <strong>de</strong> cualquier tipo.<br />
*/<br />
public static final String ID = "ID";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el documento <strong>de</strong> i<strong>de</strong>ntificador <strong>de</strong> una persona física (N<br />
*/<br />
public static final String NIFNIE = "NIF/NIE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el documento <strong>de</strong> i<strong>de</strong>ntificador <strong>de</strong> una persona jurídica<br />
*/<br />
public static final String CIF = "CIF";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un nombre <strong>de</strong> una persona física o jurídica.<br />
*/<br />
public static final String NAME = "NAME";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el primer apellido <strong>de</strong> una persona física.<br />
*/<br />
public static final String SURNAME1 = "SURNAME1";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el primer apellido <strong>de</strong> una persona jurídica.<br />
*/<br />
public static final String SURNAME2 = "SURNAME2";<br />
/**<br />
* Constante que <strong>de</strong>fine el nombre <strong><strong>de</strong>l</strong> i<strong>de</strong>ntificador único <strong>de</strong> una persona en la bas<br />
* Principado <strong>de</strong> Asturias<br />
*/<br />
public static final String ID_THIRD_PARTY = "ID THIRD PARTY";<br />
/**<br />
* Constante que <strong>de</strong>fine el i<strong>de</strong>ntificador <strong>de</strong> Unida<strong>de</strong>s Organizativas<br />
*/<br />
public static final String ORGANIZATIONAL_UNIT_ID = "ORGANIZATIONAL UNIT ID";<br />
/**<br />
* Constante que <strong>de</strong>fine el nombre <strong>de</strong> Unida<strong>de</strong>s Organizativas<br />
*/<br />
public static final String ORGANIZATIONAL_UNIT_NAME = "ORGANIZATIONAL UNIT NAME";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el nombre <strong>de</strong> un agente tramitador<br />
*/<br />
public static final String PROXY_AGENT_USERNAME = "PROXY AGENT";<br />
10
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
/**<br />
* Constante <strong>de</strong> i<strong>de</strong>ntifica el nombre <strong>de</strong> un usuario<br />
*/<br />
public static final String USERNAME = "USERNAME";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un certificado digital<br />
*/<br />
public static final String X509_DIGITAL_CERTIFICATE =<br />
"javax.servlet.request.X509Certificate";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un conjunto <strong>de</strong> datos personales<br />
*/<br />
public static final String PERSONAL_DATA = "PERSONAL DATA";<br />
/**<br />
* Constante que <strong>de</strong>fine el nivel <strong>de</strong> seguridad 0<br />
*/<br />
public static final String SECURITY_LEVEL_0 = "0";<br />
/**<br />
* Constante que <strong>de</strong>fine el nivel <strong>de</strong> seguridad 1<br />
*/<br />
public static final String SECURITY_LEVEL_1 = "1";<br />
/**<br />
* Constante que <strong>de</strong>fine el nivel <strong>de</strong> seguridad 2<br />
*/<br />
public static final String SECURITY_LEVEL_2 = "2";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica la contraseña <strong>de</strong> un usuario<br />
*/<br />
public static final String PASSWORD = "PASSWORD";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica una dirección IP<br />
*/<br />
public static final String IP = "IP";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un tipo <strong>de</strong> actor<br />
*/<br />
public static final String ACTOR_TYPE = "ACTOR TYPE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un nivel <strong>de</strong> seguridad<br />
*/<br />
public static final String LOGIN_LEVEL = "LOGIN LEVEL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un conjunto <strong>de</strong> roles<br />
11
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
*/<br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
public static final String ROLES = "ROLES";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un Principal primario (i<strong>de</strong>ntificador único)<br />
*/<br />
public static final String PRIMARY_PRINCIPAL = "PRIMARY_PRINCIPAL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un conjunto <strong>de</strong> Principals secundario<br />
*/<br />
public static final String SECONDARY_PRINCIPALS = "SECONDARY_PRINCIPALS";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica una aplicacion<br />
*/<br />
public static final String ID_APP = "ID APP";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un tipo <strong>de</strong> actor Empleado Público.<br />
*/<br />
public static final String PUBLIC_EMPLOYEE_ACTOR = "EMPLOYEE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un tipo <strong>de</strong> actor Empleado Ciudadano.<br />
*/<br />
public static final String CITIZEN_ACTOR = "CITIZEN";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un tipo <strong>de</strong> actor Colaborador (tramitador).<br />
*/<br />
public static final String PARTNER_ACTOR = "COLABORADOR";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un canal <strong>de</strong> acceso<br />
*/<br />
public static final String CHANNEL = "CHANNEL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el canal <strong>de</strong> acceso por Portal web.<br />
*/<br />
public static final String PORTAL_CHANNEL = "PORTAL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica la razón social <strong>de</strong> una persona jurídica.<br />
*/<br />
public static final String RAZON_SOCIAL = "RAZON SOCIAL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica al tipo <strong>de</strong> persona física.<br />
*/<br />
public static final String PERSONA_FISICA_TYPE = "F";<br />
/**<br />
12
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
* Constante que i<strong>de</strong>ntifica <strong>Módulo</strong> <strong>Común</strong> al <strong>de</strong> tipo <strong>Autenticación</strong>. <strong>de</strong> persona jurídica<br />
*/<br />
public static final String PERSONA_JURIDICA_TYPE = "J";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el canal <strong>de</strong> acceso presencial.<br />
*/<br />
public static final String PRESENTIAL_CHANNEL = "PRESENTIAL";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el canal <strong>de</strong> acceso telefónico.<br />
*/<br />
public static final String PHONE_CHANNEL = "PHONE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica posiciones <strong>de</strong> una contraseña.<br />
*/<br />
public static final String PASSWORD_POSITIONS = "PASSWORD_POSITIONS";<br />
/**<br />
* Constante que indica el numero <strong>de</strong> posiciones aleatorias <strong>de</strong> uan contraseña<br />
* a utilizar en la autentificación.<br />
*/<br />
public static final int RANDOM_POSITIONS_SIZE = 3;<br />
/**<br />
* Constante que i<strong>de</strong>ntifica al tipo <strong>de</strong> i<strong>de</strong>ntificador fiscal.<br />
*/<br />
public static final String IF_TYPE = "IF_TYPE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el i<strong>de</strong>ntificador fiscal NIF.<br />
*/<br />
public static final String IF_NIF_TYPE = "NIF";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el i<strong>de</strong>ntificador fiscal CIF.<br />
*/<br />
public static final String IF_CIF_TYPE = "CIF";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el i<strong>de</strong>ntificador fiscal NIE.<br />
*/<br />
public static final String IF_NIE_TYPE = "NIE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el Principal que indica que una contraseña ha expirado<br />
*/<br />
public static final String PASSWORD_EXPIRED = "PASSWORD EXPIRED";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el conjunto <strong>de</strong> Principals que suponen warnings <strong>de</strong> la o<br />
*/<br />
public static final String LOGIN_WARNING = "LOGIN WARNINGS";<br />
13
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>.<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el conjunto <strong>de</strong> Principals que suponen datos <strong><strong>de</strong>l</strong> usuari<br />
*/<br />
public static final String USER_DATA = "USER DATA";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el conjunto <strong>de</strong> Principals que suponen datos <strong><strong>de</strong>l</strong> escena<br />
*/<br />
public static final String SCENARIO_DATA = "SCENARIO DATA";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica el tipo <strong>de</strong> usuario cuyos datos contiene un Principal c<br />
* @see es.princast.framework.facilities.security.PrincastCompositePrincipal<br />
*/<br />
public static final String AUTHENTIFIED_USER_TYPE = "USER TYPE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un Principal que contiene datos <strong>de</strong> un ciudadano autent<br />
*/<br />
public static final String CITIZEN_USER_TYPE = "CITIZEN USER TYPE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un Principal que contiene datos <strong>de</strong> un agente tramitado<br />
*/<br />
public static final String AGENT_USER_TYPE = "AGENT USER TYPE";<br />
/**<br />
* Constante que i<strong>de</strong>ntifica un Principal que contiene datos <strong>de</strong> un empleado<br />
*/<br />
public static final String EMPLOYEE_USER_TYPE = "EMPLOYEE USER TYPE";<br />
/**<br />
* Longitud mínima permitida para las contraseñas<br />
*/<br />
public static final int MIN_PASSWORD_LENGTH = 8;<br />
/**<br />
* Conjunto <strong>de</strong> caracteres no permitidos en las contraseñas<br />
*/<br />
public static final String PASSWD_FORBIDDEN_CHARS = "@#•~$%&/()?¿¡+`}{*^[]¨-_\\ª<br />
/**<br />
* Caracter que representa un "hueco vacío" en una contraseña.<br />
*/<br />
public static final char PASSWD_EMPTY_CHAR = PASSWD_FORBIDDEN_CHARS.charAt(0);<br />
Detalle <strong>de</strong> escenarios<br />
Las operaciones necesarias para controlar el acceso <strong>de</strong> un usuario pue<strong>de</strong>n ser sensiblemente diferentes<br />
en función <strong>de</strong> las circunstancias concretas <strong>de</strong> cada acceso. Un conjunto <strong>de</strong> parámetros que <strong>de</strong>finen un<br />
medio <strong>de</strong> acceso común es un escenario. En función <strong><strong>de</strong>l</strong> escenario <strong>de</strong> autenticación que esté en curso,<br />
14
Ciudadano<br />
Portal<br />
Telefónico<br />
Presencial<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
se aplicará una lógica diferente. <strong>Módulo</strong> En función <strong>Común</strong> <strong><strong>de</strong>l</strong> <strong>de</strong> escenario, <strong>Autenticación</strong>. los datos <strong>de</strong>vueltos por el módulo pue<strong>de</strong>n ser<br />
también diferentes.<br />
Los escenarios <strong>de</strong> ciudadano indican el acceso a un recurso protegido para el tipo <strong>de</strong> actor CITIZEN.<br />
Estos accesos están reservados a ciudadanos, lo cuales, pue<strong>de</strong>n acce<strong>de</strong>r a la aplicación a través <strong>de</strong> cualquier<br />
canal (presencial, telefónico, web).<br />
Los recursos, para ciudadanos, pue<strong>de</strong>n estar protegidos con bajo cualquier nivel <strong>de</strong> seguridad: 0, 1 ó 2. La<br />
lógica <strong>de</strong> autenticación pue<strong>de</strong> variar en función <strong><strong>de</strong>l</strong> canal <strong>de</strong> acceso (parámetro tipo_canal). Los datos<br />
finales (resultado <strong>de</strong> la autenticación) son los mismos para todos los casos.<br />
El escenario <strong>de</strong> login <strong>de</strong> portal se aplica cuando un usuario (ciudadano) acce<strong>de</strong> a un recurso<br />
protegido, directamente, a través <strong><strong>de</strong>l</strong> portal (Internet). Se trata <strong><strong>de</strong>l</strong> escenario por <strong>de</strong>fecto (parámetro<br />
tipo_canal=web o nulo). Se pue<strong>de</strong> autenticar al ciudadano utilizando par NIF/contraseña o certificado<br />
digital.<br />
En este escenario, el ciudadano acce<strong>de</strong> al recurso a través <strong>de</strong> un tramitador Siebel, estando el ciudadano<br />
al otro lado <strong>de</strong> la línea telefónica. El tipo <strong>de</strong> canal (parámetro tipo_canal = telefonico) toma<br />
el valor: telefonico. Se realizará autenticación, a<strong>de</strong>más, <strong>de</strong> la dirección IP <strong><strong>de</strong>l</strong> tramitador. El control <strong>de</strong><br />
acceso se realiza exclusivamente por el par: NIF/posiciones aleatorias <strong>de</strong> la contraseña (<strong><strong>de</strong>l</strong> ciudadano).<br />
En este caso, el ciudadano acce<strong>de</strong>, <strong>de</strong> forma presencial, a la aplicación a través <strong>de</strong> un tramitador. El tipo <strong>de</strong><br />
canal (parámetro tipo_canal = presencial) toma el valor: presencial. Se realizará autenticación,<br />
a<strong>de</strong>más, <strong>de</strong> la dirección IP <strong><strong>de</strong>l</strong> tramitador. El control <strong>de</strong> acceso se realiza, por parte <strong><strong>de</strong>l</strong> tramitador,<br />
utilizando el DNI <strong><strong>de</strong>l</strong> ciudadano.<br />
Empleado publico<br />
El escenario <strong>de</strong> acceso para empleados públicos se i<strong>de</strong>ntifica por el tipo <strong>de</strong> actor bajo el que se <strong>de</strong>fine el<br />
recurso: “EMPLOYEE”. Este escenario está reservado para recursos a los que únicamente pue<strong>de</strong> acce<strong>de</strong>r<br />
un empleado para realizar su trabajo diario. A propósito <strong>de</strong> este escenario, un tramitador (empleado que<br />
realiza un trabajo en nombre <strong>de</strong> un ciudadano) no se consi<strong>de</strong>ra un empleado.<br />
En este caso, el acceso se controla únicamente con el par: usuario/contraseña.<br />
Colaborador<br />
Si a un recurso pue<strong>de</strong> acce<strong>de</strong>r un ciudadano, pudiendo estar este intermediado por un empleado o<br />
colaborador, se aplica el tipo <strong>de</strong> actor: “COLABORADOR”. En este tipo <strong>de</strong> escenarios se <strong>de</strong>be realizar una<br />
autenticación doble: <strong><strong>de</strong>l</strong> tramitador y <strong><strong>de</strong>l</strong> ciudadano. La autenticación <strong><strong>de</strong>l</strong> tramitador siempre se realiza con<br />
el par: usuario/contraseña. La <strong><strong>de</strong>l</strong> ciudadano, con el par NIF/posiciones aleatorias <strong>de</strong> contraseña o CIF/<br />
posiciones aleatorias <strong>de</strong> contraseña (si se trata <strong>de</strong> una persona jurídica).<br />
glosario<br />
15
Actor<br />
authService<br />
Canal <strong>de</strong> Acceso<br />
Constantes <strong>de</strong> Seguridad<br />
Escenario<br />
Excepción <strong>de</strong> Login<br />
Gestor <strong>de</strong> Errores<br />
I<strong>de</strong>ntificador<br />
<strong>Módulo</strong> <strong>de</strong> Login<br />
Nivel <strong>de</strong> Seguridad<br />
Principal<br />
Principal Compuesto<br />
Principal <strong>de</strong> Escenario<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> Usuario <strong>Común</strong> tipo <strong>de</strong> <strong>Autenticación</strong>.<br />
que pue<strong>de</strong> acce<strong>de</strong>r a un recurso protegido. Un Actor<br />
pue<strong>de</strong> ser: ciudadano, empleado público o colaborador. El tipo <strong>de</strong><br />
actor <strong>de</strong>terminará la lógica <strong>de</strong> autenticación empleada, así como los<br />
datos requeridos y los datos personales <strong>de</strong>vueltos a la aplicación.<br />
Nombre <strong><strong>de</strong>l</strong> servicio web <strong><strong>de</strong>l</strong><strong>Módulo</strong> <strong>Común</strong> <strong>de</strong> <strong>Autenticación</strong>. El<br />
servicio authService es la fachada para acce<strong>de</strong>r al módulo.<br />
Vía <strong>de</strong> acceso a un recurso protegido. El canal <strong>de</strong> acceso pue<strong>de</strong> ser:<br />
web, presencial o telefónico.<br />
Las constantes <strong>de</strong> seguridad (clase SecurityConstants) son el<br />
conjunto <strong>de</strong> valores que se utilizan para nombrar parámetros <strong>de</strong> login<br />
y para i<strong>de</strong>ntificar los datos que se <strong>de</strong>vuelven a la aplicación cuando se<br />
realiza una autenticación correcta.<br />
Un escenario es un conjunto <strong>de</strong> parámetros que <strong>de</strong>finen una lógica <strong>de</strong><br />
autenticación, parámetros <strong>de</strong> entrada y datos <strong>de</strong> salida comunes. Los<br />
escenarios se <strong>de</strong>finen en función <strong><strong>de</strong>l</strong> tipo <strong>de</strong> actor, el canal <strong>de</strong> acceso<br />
y el nivel <strong>de</strong> seguridad.<br />
Tipo <strong>de</strong> excepción java que <strong>de</strong>scien<strong>de</strong> <strong>de</strong> la clase JAAS<br />
LoginException. Indica cualquier situación controlada por la<br />
cual no se pue<strong>de</strong> autenticar correctamente al usuario: contraseña<br />
equivocada, privilegios insuficientes, etc.<br />
El gestor <strong>de</strong> errores (ExceptionHandler) es el objeto en el cual<br />
se <strong><strong>de</strong>l</strong>ega la manipulación <strong>de</strong> cualquier excepción producida durante<br />
el proceso <strong>de</strong> autenticación. El gestor <strong>de</strong> excepciones será capaz <strong>de</strong><br />
redireccionar el flujo <strong>de</strong> la aplicación a la URL a<strong>de</strong>cuada para cada<br />
tipo <strong>de</strong> error.<br />
El I<strong>de</strong>ntificador (PrincastI<strong>de</strong>ntifier) es el dato que permite<br />
i<strong>de</strong>ntificar unívocamente al usuario autenticado. I<strong>de</strong>ntificador <strong>de</strong><br />
tercero. Es un i<strong>de</strong>ntificador interno que tienen los ciudadanos que<br />
trabajan con el Principado <strong>de</strong> Asturias.<br />
Clase que implementa el interfaz JAAS: LoginModule. Es un tipo<br />
<strong>de</strong> clase que pue<strong>de</strong> realizar la autenticación <strong>de</strong> un usuario y cargar en<br />
un objeto todos los datos que se obtengan <strong>de</strong> dicha operación.<br />
El nivel <strong>de</strong> seguridad es un número que i<strong>de</strong>ntifica el tipo <strong>de</strong> control<br />
<strong>de</strong> acceso que se aplicará a un recurso <strong>de</strong>terminado. Nivel 0 = No hay<br />
control <strong>de</strong> seguridad. Nivel 1 = Control por par usuario /contraseña.<br />
Nivel 2 = Con-trol con certificado digital <strong>de</strong> cliente.<br />
Cualquier dato sobre el usuario obtenido al realizar el proceso <strong>de</strong><br />
Login.<br />
Conjunto <strong>de</strong> datos personales <strong><strong>de</strong>l</strong> usuario autenticado. Se trata <strong>de</strong> un<br />
map que contiene pares dato-valor. Algunos <strong>de</strong> estos datos pue<strong>de</strong>n ser:<br />
nombre, apellidos, NIF, unida<strong>de</strong>s organizativas, etc.<br />
Conjunto <strong>de</strong> datos <strong><strong>de</strong>l</strong> escenario <strong>de</strong> autenticación utilizado en un<br />
proceso <strong>de</strong> login. Estos datos pue<strong>de</strong>n ser: nivel <strong>de</strong> seguridad, canal,<br />
actor, etc.<br />
16
Rol<br />
Siebel<br />
Subject<br />
Warning<br />
MANUAL DE DESARROLLO DE<br />
APLICACIONES J2EE. <strong>Cliente</strong> <strong><strong>de</strong>l</strong><br />
<strong>Módulo</strong> Privilegio <strong>Común</strong> <strong>de</strong> <strong><strong>de</strong>l</strong> <strong>Autenticación</strong>.<br />
usuario una aplicación.<br />
Sistema CRM <strong><strong>de</strong>l</strong> Principado <strong>de</strong> Asturias a través <strong><strong>de</strong>l</strong> cual, los<br />
tramitadores pue<strong>de</strong>n acce<strong>de</strong>r a las aplicaciones <strong>de</strong> portal en nombre<br />
<strong>de</strong> un ciudadano.<br />
Objeto JAAS que contiene todos los Principals <strong>de</strong> un usuario<br />
autenticado.<br />
Situación anómala en el proceso <strong>de</strong> autenticación. Un warning no<br />
supone un error. Si se da un warning el acceso esta garantizado para<br />
el usuario.<br />
A. Principals <strong>de</strong> cada escenario<br />
Figura A.1. Tabla <strong>de</strong> Principals <strong>de</strong>vueltos por cada escenario<br />
17