Versiones comparadas

Clave

  • Se ha añadido esta línea.
  • Se ha eliminado esta línea.
  • El formato se ha cambiado.
Nota
titleAplicaciones FundeWeb 1.x

Si estás trabajando con una aplicación FundeWeb 1.x debes leer la guía ...

Pasos a seguir

...

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.


Este es un ejemplo en el que solo admitimos la autenticación mediante correo del SSO para acceder a la aplicación:

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

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

import java.io.Serializable;
import java.util.MissingResourceException;
import java.util.ResourceBundle;

import javax.faces.model.SelectItem;

import org.jboss.seam.Component;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Observer;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.annotations.Startup;
import org.jboss.seam.annotations.intercept.BypassInterceptors;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.core.SeamResourceBundle;
import org.jboss.seam.log.Log;
import org.jboss.seam.log.Logging;

import es.um.atica.apium.security.authentication.ws.AuthenticationFactoryCorreo;
import es.um.atica.seam.security.CredentialsAdapter;
import es.um.atica.seam.security.UmuIdentity;
import es.um.atica.seam.security.authentication.AbstractAuthenticationManagerBean;Factory;

import es.um.atica.seam.security.authentication.credentials.CredentialsUmuConstants;
import es.um.atica.seam.security.authentication.factoriesmethod.AuthenticationFactorySSOAuthenticationMethods;
import es.um.atica.seam.security.authentication.method.AuthenticationMethod;

@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;
        }}
		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:

Bloque de código
<factory name="es.um.atica.security.authentication.ssoAuthenticationMethods" value="#{authenticationManagerBean.validsSSOAuthenticationMethods}"/>

o

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


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.apiumXXXX.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>


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