Autenticación con Tarjeta Universitaria UMU

PEDRO DELGADO YARZA 2014/01/29 13:53

En este tipo de autenticación tenemos que hacer uso de una librería desarrollada por PCI que nos permita acceder a la tarjeta universitara. Dicha librería se llama Applet Sestertium y debemos configurar nuestra aplicación para que haga uso de ella en caso de aplicar este tipo de autenticación.

Los pasos que debemos seguir para configurar la autenticación son los siguientes:

  • Configurar la llamada al Servicio Sestertium para obtener el código HTML del Applet Sestertium.
  • Obtener la IP desde la que se conecta el cliente, necesaria para obtener el DNI asociado a la tarjeta.
  • Configurar la llamada al Servicio Sestertium para obtener el DNI asociado a la tarjeta en el método de autenticación.
  • Configurar la interacción en JavaScript con el Applet Sestertium.
  • Configurar la página de autenticación.
  • Configurar los ficheros de mensajes.

Para obtener el código HTML del applet, tenemos que utilizar el Servicio Sestertium, que internamente obtiene dicho código. Para eso, tenemos que hacer uso del componente authenticationManagerBean, que contendrá dicha llamada en su método de autenticación.

En Fundeweb 2.0 este componente ya está incluido en las librerías de autenticación por lo que no hará falta realizar modificaciones en el código Java.

   public class AuthenticationMethodCard extends AuthenticationMethod {
 
	private static final Log LOG = Logging.getLog(AuthenticationMethodCard.class);
 
	public boolean authenticate() {
		try {
			String dni = getServicioSestertiumUmu().getDniTarjeta(EnvironmentManagerBean.instance().getUserIP());
			LOG.info("Autenticando a: #0 - IP: #1", dni, EnvironmentManagerBean.instance().getUserIP());
			this.loadPersonaByIdentificador(dni);
			return true;
		} catch (ServiceNotFoundException snfe) {
			LOG.error("Error al buscar un servicio", snfe);
		} catch (SQLException se) {
			LOG.error("Error: al obtener el DNI del usuario de la tarjeta.", se);
		} catch (PersonaException pe) {
			LOG.error("Error: al obtener los datos del Usuario en GENTE.", pe);
			processErrorMessage();
		} catch (PersonaNotFoundException pnfe) {
			LOG.error("Error: el usuario no se encuentra en GENTE.", pnfe);
			processErrorMessage();
		}
		return false;
	}
 
	protected ServicioSestertiumUmu getServicioSestertiumUmu() throws ServiceNotFoundException {
		return (ServicioSestertiumUmu) BuscadorServiciosAtica.obtenerServicio(ServicioSestertiumUmu.ID);
	}
 
	/* (non-Javadoc)
	 * @see org.umu.atica.util.FundeWebManager#getLog()
	 */
	@Override
	protected Log getLog() {
		return LOG;
	}
 
   }

Al mismo tiempo se han incluido en la pantalla de login el código necesario para la importación de las librerías que leerán del lector la tarjeta de la universidad.

         <s:decorate id="pinField" template="/layout/displayLine.xhtml" rendered="#{authenticationManagerBean.cardAuthentication}">
		<s:decorate template="/layout/displayCell.xhtml">
			<ui:define name="label">#{messages['label.pin']}</ui:define>
			<ui:param name="styleClassLabel" value="name-cell-login" />
       			<ui:param name="styleClassValue" value="value-cell-login" />
			<h:inputSecret value="pass" styleClass="password-login" id="pin" size="4" maxlength="4" 
			disabled="#{!authenticationManagerBean.cardAuthentication}"/>
		</s:decorate>
       	</s:decorate>
 
           ....
           ....
           ....
 
 	<s:div id="extrasAuthenticationCardDiv">
		<!-- applet para leer de la tarjeta -->	
		<h:outputText id="sestertiumApplet" value="#{authenticationManagerBean.sestertiumApplet}" escape="false"
		rendered="#{authenticationManagerBean.cardAuthentication}"/>
	</s:div>
  • fdw2.0/fundeweb2.0/gt/autenticacion_tarjeta_umu.txt
  • Última modificación: 07/11/2017 10:46
  • (editor externo)