Table des matières

Authentic

Doc officielle (en partie obsolète) : https://authentic2.readthedocs.io/en/latest/

Configuration d'une application cliente CAS

Pour cela, il faut accéder à l'interface d'admin d'Authentic : https://connexion.exenple.fr/admin/ (par exemple)

Puis, aller dans : Authentic2_Idp_Cas / Applications / Ajouter et renseigner le formulaire comme suit :

Génération d'attributs à la volée

Authentic permet d'écrire soi-même la méthode de génération d'attributs qui seront ensuite diffusables aux services utilisant le SSO. Pour cela, il faut les déclarer dans la variable de configuration ATTRIBUTE_SOURCES comme suit :

def generate_fullname(ctx):
    return ctx['user'].attributes.first_name + " " + ctx['user'].attributes.last_name
 
ATTRIBUTE_SOURCES = [
    ('function', {
        'name': 'fullname',
        'dependencies': ['user'],
        'function': generate_fullname
    }),
]
ctx['user'].attributes permet d'accéder uniquement aux attributs synchronisés dans Authentic, pas aux attributs LDAP. Pour accéder à un attribut LDAP, il faut passer par la méthode get_attributes() :
attrs = ctx['user'].get_attributes(None, ctx)
return attrs.get('edupersonaffiliation', [])

Exemple complet pour la génération de l'attribut eduPersonScopedAffiliation :

import logging
 
log = logging.getLogger('config')
 
def generate_eduPersonScopedAffiliation(ctx):
    attrs = ctx['user'].get_attributes(None, ctx)
    if 'edupersonaffiliation' not in attrs:
        log.warning('generate_eduPersonScopedAffiliation: no edupersonaffiliation attribute found')
        return []
 
    domain = os.environ.get('EDU_SCOPED_AFFILIATION_DOMAIN')
    if not domain:
        log.warning('generate_eduPersonScopedAffiliation: EDU_SCOPED_AFFILIATION_DOMAIN not found in env')
        return []
 
    log.debug('generate_eduPersonScopedAffiliation: edupersonaffiliation = %s / domain = %s', attrs['edupersonaffiliation'], domain)
    return ["%s@%s" % (aff, domain) for aff in attrs['edupersonaffiliation']]
 
ATTRIBUTE_SOURCES = [
    ('function', {
        'name': 'eduPersonScopedAffiliation',
        'dependencies': ['user'],
        'function': generate_eduPersonScopedAffiliation
    }),
]

Bug connu

Sous Debian Jessie, erreur au démarrage d'authentic :

  File "/usr/lib/python2.7/dist-packages/authentic2/settings.py", line 82, in <module>
    MIDDLEWARE_CLASSES = plugins.register_plugins_middleware(MIDDLEWARE_CLASSES)
  File "/usr/lib/python2.7/dist-packages/authentic2/plugins.py", line 84, in register_plugins_middleware
    for plugin in get_plugins(group_name):
  File "/usr/lib/python2.7/dist-packages/authentic2/plugins.py", line 38, in get_plugins
    raise PluginError('unable to load entrypoint %s' % entrypoint, e) PluginError: ('unable to load entrypoint authentic2-idp-saml2 =
authentic2.idp.saml:Plugin', VersionConflict(django-import-export 0.2.7.4.g7225dff (/usr/lib/python2.7/dist-packages), Requirement.parse('django-import-export>=0.2.7')))

Cela viens du fait que le paquet python-setuptools proviens des backports et n'apprécie pas la syntaxe des numéros de version des librairies python fournis avec Authentic.

Cette version backports est une dépendance de certbot, le client Let's Encrypt. Pour contourner le problème, vous pouvez éditer le fichier /usr/lib/python2.7/dist-packages/authentic2-2.1.20.1016.g5fd2a16.egg-info/requires.txt et supprimer les numéros de version exigée des librairies :
  • Django-Select2
  • django-tables2
  • gadjo
  • django-import-export

Debug de message SAML

Utilisé l'outil en ligne : http://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php

Mise en place de rôles synchronisés depuis des groupes LDAP

Authentic dispose d'une fonctionnalité de rôle permettant de restreindre à des fonctionnalités d'Authentic et/ou à l'accès à des services utilisant le SSO.

Pour mettre en œuvre un rôle “Salariés” synchronisé depuis un groupe du même nom dans l'annuaire, il faut :

Le DN du groupe doit être saisi ici en minuscule !
Pour une alimentation immédiate de la liste des membres, vous pouvez également lancer une synchronisation LDAP manuellement à l'aide de la commande :
authentic2-manage sync-ldap-users

Il est ensuite possible par exemple de restreindre l'accès à un service :