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