Pages enfant
  • Intégration d'ESUP-SMSU-API dans Apereo CAS

Comparaison des versions

Légende

  • Ces lignes ont été ajoutées. Ce mot a été ajouté.
  • Ces lignes ont été supprimées. Ce mot a été supprimé.
  • La mise en forme a été modifiée.

...

Remarque

Disponible dans la branche master d'esup-smus-api sur github, cette possibilité sera effectivement présente dans la prochaine version d'esup-smsu-api (la version qui suit la 3.0.0).

Côté CAS, nous avons testé et validé le bon fonctionnement de l'ensemble avec un CAS version 6.0.8

Un serveur Apereo CAS peut utiliser ESUP-SMSU-API pour envoyer des SMS.

...

La mise en place de cette possibilité implique de positionner dans le fichier de configuration CAS cas.properties les choses suivantes :

Bloc de code
# Récupération du numéro de mobile depuis ldap pour le mfa-simple au travers duquel on utilise ESUP-SMSU
...
cas.authn.attributeRepository.ldap[0].attributes.mobile = mobile
...


##############################                                                                                                                                                              
## ESUP-SMSU                ##                                                                                                                                                              
##############################                                                                                                                                                              
cas.smsProvider.rest.url=http://smsu-api.univ-ville.fr/apereo-cas                                                                                                                          
cas.smsProvider.rest.basicAuthUsername=smsuApiApereoCasSccount
cas.smsProvider.rest.basicAuthPassword=motDePasse


##############################                                                                                                                                                              
## MFA                      ##                                                                                                                                                              
##############################                                                                                                                                                              
cas.authn.mfa.globalFailureMode=OPEN
cas.authn.mfa.groovyScript=file:/etc/cas/config/mfaGroovyTrigger.groovy

cas.authn.mfa.simple.name=smsu
cas.authn.mfa.simple.order=0
cas.authn.mfa.simple.timeToKillInSeconds=300

cas.authn.mfa.simple.sms.from=Université EsupPortail
cas.authn.mfa.simple.sms.text=Bonjour, voici le code SMS requis pour votre authentification CAS : %s
cas.authn.mfa.simple.sms.attributeName=mobile


Ne pas oublier de mettre dans le build.gradle de CAS :


Bloc de code
compile "org.apereo.cas:cas-server-support-simple-mfa:${project.'cas.version'}"


Confère la ligne 'cas.authn.mfa.groovyScript=file:/etc/cas/config/mfaGroovyTrigger.groovy' on décide ici d'activer le MFA via un script groovy, c'est ce qui parait le plus souple à réaliser ici. 

Les modifications sur le script sont pris en compte immédiatement.

Le paramètre 'cas.authn.mfa.globalFailureMode=OPEN'  indique que si un problème survient autour du MFA, l'authentification est validée simplement.

Un exemple d'un tel script est donnée dans la documentation CAS, on en donne ici un autre : 

Bloc de code
languagegroovy
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

        logger.info("ip : [{}]", httpRequest.getRemoteAddr())
        logger.info("mobile : [{}]", mobile)
        logger.warn("registeredService.id : [{}]", registeredService.id)

        // 10, 11 et 12 des ids de service spécifiques sur lesquels on souhaite faire du MFA pour ceux : 
    	//  * qui sont à lextérieur de l'université (adresse IP extérieure)
    	//  * et ont un numéro de mobile d'informé dans le ldap
        if ((int)registeredService.id in [10, 11, 12] && !httpRequest.getRemoteAddr().startsWith("10.") && mobile!=null && mobile.size()>0 && mobile.get(0).startsWith("0")) {
            logger.warn("mfa for [{}] !", authentication.principal.id)
            return "mfa-simple"
        }

        return null
    }
}