Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédenteDernière révisionLes deux révisions suivantes |
informatique:securite:authentic [2021/10/07 14:36] – [Authentic] bn8 | informatique:securite:authentic [2022/02/16 19:01] – [Debug de message SAML] bn8 |
---|
====== Authentic ====== | ====== Authentic ====== |
| |
| **Doc officielle (en partie obsolète) :** https://authentic2.readthedocs.io/en/latest/ |
| |
===== Configuration d'une application cliente CAS ===== | ===== Configuration d'une application cliente CAS ===== |
* ''LDAP'' : attributs récupérés directement depuis l'annuaire LDAP qui peuvent être mono-valués ou multi-valués. | * ''LDAP'' : attributs récupérés directement depuis l'annuaire LDAP qui peuvent être mono-valués ou multi-valués. |
* pas de suffixe entre parenthèses : il s'agit le plus souvent d'attributs générés à la voler par Authentic, soit en fonction d'une méthode issue de la configuration (voir paramètre ''ATTRIBUTE_SOURCES''), soit d'attributs standard prévus par Authentic. | * pas de suffixe entre parenthèses : il s'agit le plus souvent d'attributs générés à la voler par Authentic, soit en fonction d'une méthode issue de la configuration (voir paramètre ''ATTRIBUTE_SOURCES''), soit d'attributs standard prévus par Authentic. |
| |
| ===== 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 : |
| |
| <code python> |
| 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 |
| }), |
| ] |
| </code> |
| |
| <note tip>''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()'' : <code python>attrs = ctx['user'].get_attributes(None, ctx) |
| return attrs.get('edupersonaffiliation', [])</code> |
| </note> |
| |
| **Exemple complet pour la génération de l'attribut //eduPersonScopedAffiliation// :** |
| <code python> |
| 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 |
| }), |
| ] |
| </code> |
| |
| |
| |
Utilisé l'outil en ligne : http://rnd.feide.no/simplesaml/module.php/saml2debug/debug.php | 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 : |
| |
| * Créez le groupe dans l'annuaire LDAP |
| * Créez le rôle dans Authentic : |
| * Dans l'interface ''/manage/'', allez dans **Rôles** puis cliquez sur le bouton **Ajouter un rôle** : |
| * Nom : ''Salariés'' |
| * Description : ''Rôle synchronisé depuis le groupe "Salaries" de l'annuaire LDAP'' |
| * Cliquez sur le bouton **Sauvegarder** |
| * Récupérez l'identifiant court (=slug) du rôle (dans notre cas ''salaries'') |
| * Éditez le fichier de configuration d'Authentic (''/etc/authentic2/config.py'' le plus souvent) |
| * Dans la configuration LDAP (''LDAP_AUTH_SETTINGS''), pour chaque bloc concerné, ajoutez une entrée dans la clé ''group_to_role_mapping'' : <code python> |
| LDAP_AUTH_SETTINGS=[ |
| { |
| "realm": "ldap_users", |
| [...] |
| "group_to_role_mapping": [ |
| ('cn=salaries,ou=dyngroups,o=enercoop', ['salaries']), |
| ], |
| }, |
| [...] |
| ]</code> |
| <note important>**Le DN du groupe** doit être saisi ici en **minuscule** !</note> |
| * Pour prise en compte à la prochaine connexion d'un utilisateur, rechargez la configuration du service : <code bash>service authentic2 reload</code> |
| |
| <note tip>Pour une alimentation immédiate de la liste des membres, vous pouvez également lancer une synchronisation LDAP manuellement à l'aide de la commande : <code bash>authentic2-manage sync-ldap-users</code></note> |