...
| Bloc de code | ||
|---|---|---|
| ||
cas.authn.mfa.groovy-script.location=file:/etc/cas/config/mfaGroovyTrigger.groovy |
Un tel script doit retourner l'ID du mfa à déclencher par CAS, ou null si le MFA ne doit pas être déclenché.
Dans esup-otp–cas, l'ID définit pour esup-otp est "mfa-esupotp".
Le script peut permettre de décider dynamiquement, pour chaque utilisateur, chaque service consommé, si le MFA doit être activé.
Il peut s’appuyer ainsi sur :
les attributs récupérés (LDAP) ;
- le nom/identifiant du service accédé ;
des appels à des API distantes ;
ou encore, les services/librairies internes à CAS, y compris ceux issus du module esup-otp-cas.
Voici un exemple concret de script Groovy qui interroge le service esupOtpService pour vérifier si l’utilisateur dispose d’au moins une méthode d’authentification forte activée dans esup-otp et qui déclenche la MFA uniquement si c'est le cas :
| Bloc de code | ||
|---|---|---|
| ||
import java.util.*
class SampleGroovyEventResolver {
def String run(service, registeredService, authentication, httpRequest, logger, ... args) {
def ctx = org.apereo.cas.util.spring.ApplicationContextProvider.getApplicationContext()
def esupOtpService = ctx.getBean("esupOtpService")
def esupOtpUserInfos = esupOtpService.getUserInfos(authentication.principal.id)
def esupOtpMethods = esupOtpUserInfos.get("user").get("methods").toMap().values()
def oneMfaMethodIsActive = esupOtpMethods.stream().anyMatch { method ->
method instanceof Map && method.get("active")
}
return oneMfaMethodIsActive ? "mfa-esupotp" : null
}
} |
Comment inciter l'activation du MFA via esup-otp-cas lors de l'authentification CAS ?
Il est possible d’afficher un message d’interruption pendant l’authentification CAS, afin de sensibiliser ou inciter l’utilisateur à activer l’authentification multifacteur (MFA) via esup-otp-cas.
Ce mécanisme d’interrupt peut notamment être piloté à l’aide d’un script Groovy. Il suffit de spécifier le chemin du script dans le fichier cas.properties :
| Bloc de code | ||
|---|---|---|
| ||
cas.interrupt.groovy.location=file:/etc/cas/config/interrupt.groovy |
Ce script est exécuté après l’authentification, mais avant la redirection finale vers le service cible.
Il peut afficher un message personnalisé, accompagné de liens, et peut également bloquer ou non la suite du processus (en empêchant éventuellement l’établissement d’une session SSO).
Le script peut s’appuyer sur :
les attributs récupérés (LDAP) ;
- le nom/identifiant du service accédé ;
des appels à des API distantes ;
ou encore, les services/librairies internes à CAS, y compris ceux issus du module esup-otp-cas.
Voici un exemple de script Groovy qui utilise esupOtpService pour détecter si l’utilisateur n’a activé aucune méthode de MFA, et lui propose alors un message d’incitation avec un lien vers l’interface d’activation :
| Bloc de code | ||
|---|---|---|
| ||
import java.util.*
import org.apereo.cas.interrupt.InterruptResponse
def run(principal, attributes, service, registeredService, requestContext, logger, ... args) {
def ctx = org.apereo.cas.util.spring.ApplicationContextProvider.getApplicationContext()
def esupOtpService = ctx.getBean("esupOtpService")
def esupOtpUserInfos = esupOtpService.getUserInfos(principal.id)
def esupOtpMethods = esupOtpUserInfos.get("user").get("methods").toMap().values()
def oneMfaMethodIsActive = esupOtpMethods.stream().anyMatch { method ->
method instanceof Map && method.get("active")
}
if (!oneMfaMethodIsActive) {
def message = "Vous n'avez pas encore activé votre authentification renforcée avec ESUP-OTP, il serait souhaitable de le faire."
def links = ["Accéder à ESUP-OTP pour activer l'authentification renforcée" : "https://esup-otp-manager.univ-ville.fr/preferences"]
def block = false
def ssoEnabled = false
return new InterruptResponse(message, links, block, ssoEnabled)
}
return null
} |
...
Ce que fait ce script :
Il interroge le service
esupOtpServicepour connaître les méthodes MFA activées de l’utilisateur.Si aucune méthode n’est active :
il affiche un message incitant à activer le MFA ; ce message est affiché dès la première authentification (TGT), mais aussi à chaque authentification sur chaque service (ST), ce grâce au
ssoEnabled valué à false.il fournit un lien vers l’interface de gestion des préférences MFA ;
tout en lui permettant tout de même d'accéder au service demandé, ce grâce au block valué à false.
Si au moins une méthode est active, aucun message n’est affiché.
...