Estás viendo una versión antigua de esta página. Ve a la versión actual.

Comparar con el actual Ver el historial de la página

« Anterior Versión 3 Siguiente »

IN PROGRESS

LoA (Level of Assurance) es el grado de confiabilidad de la identidad obtenida por un usuario autenticado en un sistema, es decir, el nivel de seguridad de un usuario autenticado en un sistema mediante un mecanismo concreto.

Por ejemplo, en nuestro contexto UMU, la identidad obtenida por un usuario autenticado en CAS con su correo y contraseña tendrá el nivel LoA más bajo (LOW).
El mismo usuario, autenticado en CAS con un certificado digital, obtendrá un nivel LoA medio (MEDIUM). 

Esta guía detalla los pasos a configurar en nuestras APIs REST FundeWebJS para securizarlas permitiendo solo el acceso a las identidades con un nivel LoA mínimo.

Esta página va dirigida a APIs FundeWebJS que necesitan configurar expresamente un nivel LoA mínimo MEDIUM o superior. Por ejemplo, algunas APIs de EADMON.

En otro caso, no es necesario realizar ninguna configuración.


Dependiendo de la situación, se distinguen dos tipos de configuraciones:
- Global: Todos los endpoints de nuestra API requerirán el nivel LoA establecido en su configuración.
- Por endpoint: Configurar el nivel LoA de forma independiente para cada endpoint. 



CONFIGURACIÓN

COMÚN

  1. Añadir en el pom.xml la siguiente dependencia:

    	<dependency>
    		<groupId>es.um.atica.fundewebjs.fundewebjs-api</groupId>
    		<artifactId>fundewebjs-security</artifactId>
    		<version>${fdwjs.version}</version>
    	</dependency>

    La librería se encuentra a partir de la versión fdwjs 1.0.7-SNAPSHOT.

GLOBAL

Clase Configuration (SecurityConfig)

  1. En la clase con la configuración de seguridad (generalmente SecurityConfig.java), añadir el siguiente Bean para configurar el filtro para LoA, estableciendo el nivel mínimo que se desea establecer en toda nuestra API:

        @Bean
    	public UmuJwtLoaAuthenticationFilter loaFilterBean() {
    		return new UmuJwtLoaAuthenticationFilter( UmuJwtLoaLevelEnum.MEDIUM );
    	}
  2. En la misma clase, en el método configure, añadir el filtro configurado en el paso anterior de la siguiente forma:

    .addFilterAfter( loaFilterBean(), BearerTokenAuthenticationFilter.class )

    Hay que añadirlo justo antes de  .oauth2ResourceServer().jwt().
    Por ejemplo:

       @Override
        protected void configure(HttpSecurity http) throws Exception {
            http
                .authorizeRequests()
                .mvcMatchers("/actuator/**").permitAll()
                .mvcMatchers("/api-docs").permitAll()
                .mvcMatchers(apiPath+"/public/**").permitAll()
                .mvcMatchers(apiPath+"/private/**").hasAnyAuthority(serverScopes)
    				.anyRequest().authenticated().and()
    				.addFilterAfter( loggingFilterBean(), BearerTokenAuthenticationFilter.class )
    				.addFilterAfter( loaFilterBean(), BearerTokenAuthenticationFilter.class )
                .oauth2ResourceServer().jwt();
            http.csrf().disable();
        }

POR MÉTODO

1 .@EnableGlobalMethodSecurity( prePostEnabled = true )

2.  @Bean
    UmuJwtLoaAccessDeniedHandler accessDeniedHandler() {
        return new UmuJwtLoaAccessDeniedHandler();
    }

2. .and().exceptionHandling().accessDeniedHandler( accessDeniedHandler() )

3.  @PreAuthorize( "@umuJwtLoaAuthenticator.isMediumLoA(authentication)" )



RESPUESTA


TABLA DE EQUIVALENCIAS 

Estas equivalencias son TEMPORALES y todavía pueden estar sujetas a modificaciones.
Las modificaciones serán transparentes al desarrollo. Se realizan en la librería fundewebjs-security.

Combinación de AutenticaciónLoA
LDAP (cuenta UM)LOW
LDAP (cuenta UM) + MFA (OTP)MEDIUM
CMNLOW
CMN + MFAMEDIUM
Cl@ve certificadoMEDIUM
Cl@ve PIN (lleva implícito el OTP)MEDIUM
Cl@ve permanenteLOW
Cl@ve certificado + MFAMEDIUM
Cl@ve PIN + MFAMEDIUM
Cl@ve permanente + MFAMEDIUM
*Cl@ve + DNIeHIGH

Artículos Relacionados



  • Sin etiquetas