| Nota | ||
|---|---|---|
| ||
Si estás trabajando con una aplicación FundeWeb 1.x debes leer la guía ... |
...
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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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:
...
| 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 | ||||||
|---|---|---|---|---|---|---|
| ||||||
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 | ||||
|---|---|---|---|---|
| ||||
<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 | ||||
|---|---|---|---|---|
| ||||
<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 | ||||
|---|---|---|---|---|
| ||||
<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