Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.

...

Hasta Julio de 2021 Fundeweb sólo soportaba el login CAS a través de cuenta UM. A partir de esta fecha, CAS soporta login mediante diversos mecanimos (Certificado, Cl@ave, etc.). Para poder soportar desde aplicaciones Fundeweb que CAS utilice diferentes métodos de autenticación y poder reaccionar si alguna de nuestras aplicaciones no soportara algún método indicando los soportados deberemos seguir esta guía.


Para poder aplicar estos cambios en tu aplicación necesitas FundeWeb IDE 2.0 o 2.1.

...

Hay que modificar o añadir las siguientes carpetas y ficheros:

AuthenticationManagerBean.java

  • Asegurar que AuthenticationManagerBean extiende la clase AbstractAuthenticationManagerBean.
  • Añadir los métodos de autenticación validos que ofrece el SSO.

...

Bloque de código
languagejava
themeEclipse
linenumberstrue
package es.um.atica.XXXX.security.authentication;

...

import org.jboss.seam.annotations.Factory;

import es.um.atica.seam.security.authentication.Constants;
import es.um.atica.seam.security.authentication.method.SSOAuthenticationMethods;


@Name( "authenticationManagerBean" )
@Scope( SESSION )
@Install( precedence = FRAMEWORK )
@BypassInterceptors
@Startup
public class AuthenticationManagerBean extends AbstractAuthenticationManagerBean {

	// Declaracion de los metodos de autenticacion validos por SSO
	private static final SSOAuthenticationMethods[] VALIDS_SSO_AUTHENTICATION_METHODS = {
		SSOAuthenticationMethods.SSO_CORREO
	};

	...

    // Forma de hacer accesible los metodos de autenticacion validos por SSO
	@Factory( SSOAuthenticationMethodsConstants.SSO_AUTHENTICATION_METHODS_COMPONENT_NAME )
	public SSOAuthenticationMethods[] getValidsSSOAuthenticationMethods() {
		return VALIDS_SSO_AUTHENTICATION_METHODS;
	}
}


Los métodos de autenticación posibles son:


Bloque de código
SOAuthenticationMethods[]: SSO_CORREO, SSO_MFA_CORREO_OTP, SSO_CLAVE, SSO_CLAVE_CERT, SSO_CLAVE_EIDAS, SSO_CLAVE_SEGSOC, SSO_CLAVE_PIN24H, SSO_CLAVE_PIN24H_MOVIL, SSO_CMN


Añadir SSO_CORREO implica, que se aceptan SSO_CORREO y SSO_MFA_CORREO_OTP.

Añadir SSO_CLAVE implica, que se aceptan todos los métodos de Cl@ve: SSO_CLAVE_CERT, SSO_CLAVE_EIDAS, SSO_CLAVE_SEGSOC, SSO_CLAVE_PIN24H y SSO_CLAVE_PIN24H_MOVIL.


Sino se usa la anotación @Factory, podemos declarar la factoría en el fichero components.xml:

...

title
Bloque de código
<factory name="es.um.atica.security.authentication.ssoAuthenticationMethods" method="#{authenticationManagerBean.getValidsSSOAuthenticationMethods}"/>
Info
FundeWeb 1.5

En aplicaciones FundeWeb 1.5 el nombre a utilizar es "org.umu.atica.security.authentication.ssoAuthenticationMethods".


AuthenticatorAction.java

  • Asegurar que AuthenticationActionAuthenticatorAction extiende la clase AbstractAuthenticationAction AbstractAuthenticatorAction.

La clase normalmente, suele parecerse al siguiente ejemplo:

Bloque de código
languagejava
themeEclipse
linenumberstrue
package es.um.atica.XXXX.security.authentication;

import static org.jboss.seam.annotations.Install.FRAMEWORK;

import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;

import es.um.atica.seam.security.authentication.AbstractAuthenticationManagerBean;
import es.um.atica.seam.security.authentication.AbstractAuthenticatorAction;

@Name( "authenticator" )
@Install( precedence = FRAMEWORK )
@BypassInterceptors
public class AuthenticatorAction extends AbstractAuthenticatorAction {

	private static final Log LOG = Logging.getLog( AuthenticatorAction.class );

	@Override
	protected AbstractAuthenticationManagerBean getAuthenticationManagerBean() {
		return AuthenticationManagerBean.instance();
	}

	/*
	 * (non-Javadoc)
	 * @see es.um.atica.util.FundeWebManagerBean#getLog()
	 */
	@Override
	protected Log getLog() {
		return LOG;
	}
}


pages.xml

Añadir la siguiente regla de navegación al final de la declaración de <page view-id="*">:

Bloque de código
themeEclipse
linenumberstrue
<navigation from-action="#{identity.relogByCAS}">
	    <redirect url="https://${cas.server.url}.um.es/cas/logout?service=">
    	<param name="service" value="https://${cas.application.url}/#{request.contextPath}"/>
    </>redirect>
</navigation>


Añadir la siguiente excepción:

Bloque de código
themeEclipse
linenumberstrue
    <exception class="es.um.atica.seam.security.authentication.exceptions.AuthenticationMethodNotSupportedException">
	    <redirect view-id="/fundeweb/error_auth_method.xhtml">
	        <message severity="error">#{messages['es.um.atica.security.authentication.AuthenticationMethodNotSupportedException']}</message>
	    </redirect>
	</exception>
Info
titleFundeWeb 1.5
En aplicaciones FundeWeb 1.5 la clase a utilizar es "org.umu.atica.seam.security.authentication.exceptions.AuthenticationMethodNotSupportedException".


Modificar la excepción para la clase org.jboss.seam.security.AuthorizationException:

Bloque de código
themeEclipse
linenumberstrue
	<exception class="org.jboss.seam.security.AuthorizationException">
		<redirect view-id="/fundeweb/error_no_auth.xhtml">
			<message severity="error">#{messages['org.jboss.seam.security.AuthorizationException']}</message>
		</redirect>
	</exception>



Comprobación


Es necesaria realizar la comprobación de la existencia del fichero recomendaciones.xhtml que se tiene que encontrar en la carpeta src/main/webapp/layout del módulo WEB. Sino existe la podéis descargar de recomendaciones.xhtml