...
Bloc de code |
---|
import java.util.* class SampleGroovyEventResolver { def String run(final Object... args) { def service = args[0] def registeredService = args[1] def authentication = args[2] def httpRequest = args[3] def logger = args[4] def mobile = authentication.principal.attributes.mobile def ip = httpRequest.getRemoteAddr() def memberOf = authentication.principal.attributes.memberOf /* logger.info("ip : [{}]", httpRequest.getRemoteAddr()) logger.info("mobile : [{}]", mobile) logger.info("registeredService.id : [{}]", registeredService.id) */ if ((int)registeredService.id in [22] && 'cn=from.grouper.admin,ou=groups,dc=univ-rouen,dc=fr' in memberOf) { logger.warn("mfa required for grouper !", authentication.principal.id) return "mfa-esupotp" } if(!('cn=from.cas.otp,ou=groups,dc=univ-rouen,dc=fr' in memberOf)) { return null; } if ((int)registeredService.id in [12,13,14,18,21,22] && !ip.startsWith("10.0.1.")) { logger.warn("mfa for [{}] !", authentication.principal.id) return "mfa-esupotp" } if ((int)registeredService.id in [11, 18] && !ip.startsWith("10.0.1.") && 'cn=for.multipass.admin,ou=groups,dc=univ-rouen,dc=fr' in memberOf) { logger.warn("mfa for [{}] !", authentication.principal.id) return "mfa-esupotp" } return null } } |
services
Distinction d'un service provider shibboleth
Le service grouper qui est une application shibbolethisée est détecté via un service spécifique porté par /etc/cas/services/grouper_univ_rouen_fr-22.json :
...
Bloc de code |
---|
idp.session.enabled = false |
service proxy-cas avec clearpass
Pour l'ENT avec la partie esup-filemanager qui utilise les mécanismes de proxy-cas / clearpass, la fonctionnalité du passage de mot de passe en tant qu'attribut (chiffré) dit "clearpass" est configuré ainsi dans le fichier /etc/cas/services/esup_filemanager_univ_rouen_fr-2.json
Bloc de code |
---|
{ "@class" : "org.apereo.cas.services.RegexRegisteredService", "serviceId": "^https?://([A-Za-z0-9_-]+\\.)*normandie-univ\\.fr(/.*)?", "name": "Service opéré par la COMUE", "informationUrl": null, "privacyUrl": null, "id": 3, "description": "Vous avez demandé à vous connecter à un service proposé par la COMUE Normandie Université.", "evaluationOrder":3, "usernameAttributeProvider": { "@class": "org.apereo.cas.services.PrincipalAttributeRegisteredServiceUsernameProvider", "canonicalizationMode": "NONE", "encryptUsername": "false", "usernameAttribute": "uid" } "proxyPolicy" : { "@class" : "org.apereo.cas.services.RegexMatchingRegisteredServiceProxyPolicy", "pattern" : "^https?://.*" }, "attributeReleasePolicy" : { "@class" : "org.apereo.cas.services.ReturnAllowedAttributeReleasePolicy", "authorizedToReleaseCredentialPassword" : true, }, "publicKey" : { "@class" : "org.apereo.cas.services.RegisteredServicePublicKeyImpl", "location" : "/etc/cas/univ-rouen-esup-filemanager-public.key", "algorithm" : "RSA" } } |
Au niveau d'esup-filemanager, la configuration d'une authentification via ce mécanisme se fait alors ainsi :
Bloc de code |
---|
<bean name="univ_rouen_cas_clearpass_auth" class="org.esupportail.portlet.filemanager.services.auth.cas.ClearPassUserCasAuthenticatorService"
scope="session">
<property name="domain" value="ur"/>
<property name="userCasAuthenticatorServiceRoot" ref="casUserAuthenticationServiceRoot"/>
<property name="pkcs8Key" value="/opt/tomcat-esup/webapps/esup-filemanager/WEB-INF/classes/univ-rouen-esup-filemanager-private.p8"/>
</bean> |
ldap policy
A noter l'usage de ldap policy à l'Université de Rouen Normandie : on ajoute l'attribut ldap PwdAccountLockedTime pour verrouiller les comptes détectées comme corrompues de manière automatique (via l'usage de fail2ban notamment).
...