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