#clave-identificacion
ruta_keystore_clave=/Ruta/Completa/keystore.jks
issuer_certificado_clave=Issuer del certificado #ejemplo: CN=Autoridad de Certificacion de la UMU,O=Universidad de Murcia,ST=Murcia,C=ES
serial_certificado_clave=Serial del certificado #ejemplo: E9
pass_certificiado_clave=Password del certificado que usaremos para firmar las peticiones
pass_keystore_clave=Password del keystore
sp_id_aplicacion_clave=ID-APLICACION-CLAVE #nos la dan al dar de alta la aplicación para usar la pasarela de RedIRIS
sp_aplicacion_clave=SP-APLICACION-CLAVE #nos la dan al dar de alta la aplicación para usar la pasarela de RedIRIS
sp_institucion_aplicacion_clave=RedIRIS #nos la dan al dar de alta la aplicación para usar la pasarela de RedIRIS
sp_sector_aplicacion_clave=EDU #nos la dan al dar de alta la aplicación para usar la pasarela de RedIRIS
sp_entity_id_aplicacion_clave=entity id de la aplicación en clave #nos la dan al dar de alta la aplicación para usar la pasarela de RedIRIS
#Nivel QAA que se desee obtener. Valores posibles: 1,2,3,4
#en mi caso, 3
nivel_qaa_clave=3
url_retorno_clave=https://sede.um.es/carpeta/login_clave.seam #url a la que tiene que retornar cl@ve. Apunta al fichero login_clave.xhtml obtenido del fichero paginas.rar
url_respuestalogout_clave=https://sede.um.es/carpeta/logout_clave.seam #url a la que tiene que retornar cl@ve tras el logout. Apunta al fichero logout_clave.xhtml obtenido del fichero paginas.rar
url_pasarela_clave=https://clave-pre.sir2.rediris.es/clave/module.php/clave/idp/clave-bridge.php #valores de preproducción de Cl@ve
url_pasarela_logout_clave=https://clave-pre.sir2.rediris.es/clave/module.php/clave/idp/clave-logout.php #valores de preproducción de Cl@ve
#aFirma;Stork;SS;AEAT;none;
#seleccionar cualquier valor d la lista de arriba, separado por ;
lista_idp_excluir_clave=none
#solamente un valor de la lista aFirma, Stork, SS, AEAT o none sin terminar en ;
forzar_idp_clave=none
Los datos referentes al certificado podemos obtenerlos de la aplicación KeyStore Explorer como se explica [[fdw2.0:fundeweb2.0:gt:autenticacion_clave_identificacion#Datos del certificado|aquí]].
Una vez que hemos completado de forma correcta todas las propiedades anteriores, tenemos que añadir todos los ficheros de properties-clave.rar que podemos encontrar en la sección de [[fdw2.0:fundeweb2.0:gt:autenticacion_clave_identificacion#Archivos útiles|Archivos útiles]]. Estos ficheros debemos de copiarlos en el paquete /src/main/resources del proyecto Web.
Descomprimir y copiar los 4 ficheros del fichero paginas.rar en la carpeta /src/main/webapp del proyecto web.
Descomprimir y copiar el paquete que hay en el fichero authentication.rar en la parte /src/main/java del proyecto web.
Una vez que hemos copiado todos estos ficheros, hay que editar la clase AuthenticationManagerBean.java de nuestro proyecto. Hay que añadir las siguientes lineas de codigo:
...
import es.um.atica.seam.security.authentication.factories.AuthenticationFactoryClave;
...
...
public enum AuthenticationType {
RADIUS, CARD, CERTIFICATE, NIF, SSO, CLAVE
}
...
...
case SSO: {
return new AuthenticationFactorySSO();
}
case CLAVE: {
return new AuthenticationFactoryClave();
}
default: {
return this.defaultAuthenticationFactory;
}
...
...
public boolean isClaveAuthentication() {
return this.getAuthenticationType() == AuthenticationType.CLAVE;
}
...
...
public void activarAuthenticacionClave() {
LOG.debug("Entra en activarAuthenticacionClave");
this.setAuthenticationType( AuthenticationType.CLAVE );
this.activateCredentialsUmu(this.getAuthenticationType());
}
...
Una vez que hemos añadido este nuevo método de identificación, tendremos que tratarlo en nuestra clase
...
public class CarpetaIdentityLoader extends UmuIdentityLoader {
...
protected void cargarDatosUsuario() {
log.info("Entra en cargarDatosUsuario");
CarpetaIdentity identity = (CarpetaIdentity) this.getIdentity();
if ( AuthenticationManagerBean.instance().isSsoAuthentication()) {
...
}
else if(AuthenticationManagerBean.instance().isClaveAuthentication()){
log.info("El usuario se ha autenticado con Cl@ve.");
InfoClave infoClave = ((CredentialsClaveUmu)((CredentialsAdapter)identity.getCredentials()).getCredentialsUmu()).getInfoClave();
String idUsuario = infoClave.getIdentificador();
String nombre = infoClave.getNombre();
String apellidos = infoClave.getApellidos();
identity.setNivelAutenticacion( infoClave.getNivelQaa() );
log.info("Datos de clave");
log.debug("id usuario " + idUsuario);
log.debug("apellidos " + apellidos);
log.info("nombre " + nombre);
// Buscar si el usuario está dado de alta en Gente y cargar sus datos
try {
ServicioGenteUmu sg = (ServicioGenteUmu) Component.getInstance("es.um.atica.fundeweb.servicioGenteUmu");
String identificador = !UtilString.esCadenaVacia(idUsuario) ? idUsuario.substring(0, idUsuario.length() - 1) : "";
identity.setPersona(sg.getPersona(identificador));
identity.getPersona().setApellidos( identity.getPersona().getApellidos() );
String userName = UtilString.esCadenaVacia(identity.getPersona().getCorreo()) ? (identity.getPersona().getNombre() + " " + identity.getPersona().getApellidos()) : identity.getPersona().getCorreo();
identity.getCredentials().setUsername(userName);
}
catch (PersonaException | PersonaNotFoundException e) {
Persona persona = new Persona();
persona.setIdentificador(idUsuario);
persona.setLetra("");
persona.setNombre(nombre);
persona.setApellidos(apellidos);
identity.setPersona(persona);
String userName = nombre + " " + apellidos;
log.info("userName: #0", userName);
identity.getCredentials().setUsername(userName);
}
}
...
Añadir el paquete es.um.atica.clave en src/main/java de nuestro proyecto web que se puede encontrar en la sección de [[fdw2.0:fundeweb2.0:gt:autenticacion_clave_identificacion#Archivos útiles|Archivos útiles]] con el nombre de clave.rar.
En la página de autenticación (login.xhtml) de la aplicación en la que queramos integrar clave, habrá que añadir un nuevo método de acceso de clave. En dicha página, tenemos que añadir el formulario mediante el cual se enviará la petición SAML a Cl@ve. Un ejemplo de como podría ser es el siguiente:
...
Usuarios de la Universidad de Murcia y externos que estén registrados en el sistema de identidad electrónica Cl@ve.
Consulte la página oficial de Cl@ve para ampliar información sobre este sistema, su funcionamiento y el procedimiento de registro.
...
{{ :fdw2.0:fundeweb2.0:gt:autenticacion_clave:boton_login_clave.png?700 |}}
Al igual que hemos puesto un botón de login de Cl@ve, también será necesario poner el botón de _logout_. En mi aplicación, lo he integrado de la siguiente forma:
En el fichero **menu_lateral.xhtml**:
...
...
En el fichero **template.xhtml** he añadido el formulario de logout:
...