Uso librería de integración java: Autenticación

RECU-0507 (Recurso Ejemplo)

Descripción

Se muestra un ejemplo para la autenticación de usuarios utilizando las librerías de integración.

Requisitos

  • Java 1.6
  • Maven 2.2.1
  • Conectividad con el Repositorio de Librerías de la Junta de Andalucía
  • La JVM confía en certificados de servidor del OVD:
    • Certificado de la autoridad certificadora, CA, del certificado utilizado por OVD.
    • El propio certificado de servidor.

Ejemplo

Creación del proyecto utilizando maven

Ejecutamos el siguiente comando maven que creará el proyecto correspondiente:

$> mvn archetype:create -DgroupId=com.test -DartifactId=authtest

Referencia a las librerías (pom.xml)

Dentro de la carpeta authtest, creada en el paso anterior, encontramos el fichero pom.xml. Modificamos dicho fichero para incluir la librería de integración mag4j que nos da acceso a la autenticación. Aquí vemos el contenido final de dicho fichero.

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
 <groupId>com.test</groupId>
<artifactId>authtest</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>authtest</name>
<url>http://maven.apache.org</url>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>es.juntadeandalucia.guia</groupId>
<artifactId>mag4j</artifactId>
<version>1.0.2</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.8</version>
<scope>compile</scope>
</dependency>
</dependencies>
<build>
<finalName>${artifactId}-${version}</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
target>1.5</target>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.6</version>
</plugin>
</plugins>
</build>
</project>

Fichero de propiedades

Creamos el fichero $/authtest/src/test/resources/mag4j.properties
En dicho fichero se definen: los parámetros de conexión al directorio, la cuenta de servicio y la contraseña para realizar dicha conexión. Se muestra un ejemplo del mismo en el que habrá que establecer los valores oportunos1.

initialContextFactory = com.sun.jndi.ldap.LdapCtxFactory
#host = ldap://172.18.24.29:389
host = ldaps://directoriovirtual.ves.i-administracion.junta-andalucia.es:636
authMode = simple
baseDN = o=personas,o=identidades,o=comun,dc=juntadeandalucia,dc=es
#cuenta de servicio para conectarse al OVD
oidUserDN = cn=cs_ejemplo,o=servicios,o=identidades,o=comun,dc=juntadeandalucia,dc=es
oidPassword = passwordejemplo
#donde y como buscar el usuario
userSearchFilter=(&(objectclass=inetorgperson)(cn={0}))

truststore_location=/tmp/almacen
truststore_password=myStorePassword

#para el ApplicationAuthenticator
applicationAuthenticatorClass=es.juntadeandalucia.guia.mag4j.app.ApplicationAuthenticatorImpl
loggedUserAttribute =
#app_user
loginResourcePath =
#/login.jsp
requestUserParameter =
#user
requestPasswordParameter =
#password

 

Las propiedades truststore_* deberán ser definidas en caso de que el certificado de servidor o su CA no hayan sido instaladas en keystore definido por defecto en la JVM.

Clase java de ejemplo

Por último modificamos la clase test de ejemplo generada por maven en $/authtest/src/test/java/com/test/AppTest.java

package com.test;import static org.junit.Assert.fail;
import java.io.IOException;
import java.util.Properties;
import org.apache.log4j.Logger;
import org.junit.Before;
import org.junit.Test;
import es.juntadeandalucia.guia.mag4j.auth.MaG4JAuthenticationImpl;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JAuthentication;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JAuthenticator;
import es.juntadeandalucia.guia.mag4j.spec.MaG4JException;
import es.juntadeandalucia.guia.mag4j.spec.UserData;
import es.juntadeandalucia.guia.mag4j.util.PropertiesLoader;

/**
*Unit test for simple App.
*/
public class AppTest {
private final Logger log = Logger.getLogger(AppTest.class);
private MaG4JAuthentication authentication = null;
public static void main (String args[]) {
AppTest test = new AppTest();
try {
test.init();
test.authenticate();
} catch (MaG4JException e) {
e.printStackTrace();
}
}

public MaG4JAuthentication getAuthentication() {
return authentication;
}

@Before
public void init() throws MaG4JException{
Properties mag4j_properties = loadDefaultProperties();
authentication = createMaG4JAuthentication(mag4j_properties);
}

@Test
public void authenticate(){
String cn = "100000200";
String password = "abc123";
try {
MaG4JAuthenticator a = this.getAuthentication().getAuthenticator();
UserData user = a.authenticate(cn, password);
if(user==null) {
log.warn("Usuario no encontrado ["+cn+"] ["+password+"]");
fail();
} else {
System.out.println("OK: ["+cn+"] ["+password+"]");
}
} catch (MaG4JException e) {
log.error(e.getMessage(),e);
fail();
}
}

//********************************************************************
private MaG4JAuthentication createMaG4JAuthentication(Properties p) throws MaG4JException {
MaG4JAuthentication m = new MaG4JAuthenticationImpl();
m.init(p);
return m;
}

//*********************************
private Properties loadProperties(String resourcepath) throws MaG4JException {
try {
return PropertiesLoader.loadFromClassPath(resourcepath);
} catch (IOException e) {
throw new MaG4JException("No se pudo leer el recurso " + resourcepath);
}
}

private Properties loadDefaultProperties() throws MaG4JException {
return loadProperties(PropertiesLoader.DEFAULT_PROPERTIES_PATH);
}
}

La clase simplemente lee el fichero de propiedades, inicializa la conexión y autentica un usuario cuyo cn y contraseña se establecen en el propio código fuente.

Ejecución del ejemplo

Para probar el ejemplo ejecutamos el siguiente comando maven que debería dar un resultado correcto:

$> mvn test 

Results :

Tests run: 1, Failures: 0, Errors: 0, Skipped: 0