29.12.2013 Views

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 ...

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!