Librairie Django pour l'authentification via le CAS élèves + mot de passe à l'ENS.
Find a file
Martin Pepin 08e6162b5f Merge branch 'kerl/setup_include_package_data' into 'master'
Ajoute des fichiers manquants dans le paquet pip (source + wheel)

See merge request klub-dev-ens/authens!22
2021-01-08 12:31:25 +01:00
authens make black happy… again 2020-09-05 22:57:08 +02:00
example_site make black happy… again 2020-09-05 22:57:08 +02:00
tests Make isort happy… 2020-07-18 18:46:09 +02:00
.gitignore Setuptools packaging 2020-07-18 19:29:15 +02:00
.gitlab-ci.yml bdist_wheels is broken at the moment 2020-07-30 11:56:18 +02:00
LICENSE Setuptools packaging 2020-07-18 19:29:15 +02:00
MANIFEST.in Add non-python content to the sdist/wheel archives 2020-07-18 19:29:22 +02:00
README.md Meilleurs noms de variables, meilleure doc 2020-05-17 14:02:33 +02:00
requirements.txt Copy dependencies to setup.py 2020-07-18 19:29:22 +02:00
runtests.py Make python-black happy 2020-07-18 18:45:21 +02:00
setup.cfg Make isort happy… 2020-07-18 18:46:09 +02:00
setup.py Include templates in the sdist/bdist archives 2020-09-14 20:52:14 +02:00
tox.ini Setuptools packaging 2020-07-18 19:29:15 +02:00

AuthENS

Librairie Django pour l'authentification via le CAS élèves à l'ENS.

AuthENS fournit une page de connexion qui laisse le choix entre "Connexion par CAS" et "Connexion par mot de passe". De plus, elle gère de façon transparente les potentiels "conflits" de username liés aux comptes Django standards non-CAS (1) et aux vieux comptes clippers (2). Plus précisément :

  1. Si un compte clipper dupond est créé alors qu'un compte Django standard avec le username dupond existait déjà, le compte nouvellement créé obtient un username différent (typiquement dupond2). La personne détentrice du compte continue de se connecter en tant que dupond sur le CAS élèves mais devra utiliser le nom dupond2 lorsqu'elle choisira d'utiliser la connexion par mot de passe sur le site, typiquement après la fin de la scolarité lorsque le compte clipper est supprimé.

  2. Si, quelques années plus tard, après que dupond a terminé sa scolarité, le SPI donne le login dupond à une nouvelle personne, AuthENS détecte que le nouveau compte dupond n'est pas le même que l'ancien et crée un nouveau compte (par exemple dupond3). Le compte dupond3 peut se connecter par CAS en tant que dupond et le compte dupond2 ne peut plus se connecter que par mot de passe.

Configuration

Urls

Vous devez rendre les pages de connexion de AuthENS accessibles, par exemple en ajoutant dans votre fichier d'urls :

urlpatterns = [
  ...
  path("authens/", include("authens.urls")),
  ...
]

La page de connexion principale de AuthENS est ensuite accessible via l'url nommée "authens:login". Par commodité, AuthENS rend accessible la page de déconnexion par défaut de Django sous le nom "authens:logout".

Dans le fichier settings.py

  • Ajouter "authens" dans les INSTALLED_APPS.
  • Ajouter "authens.backends.ENSCASBackend" dans les AUTHENTICATION_BACKENDS. Si AUTHENTICATION_BACKENDS n'apparaît pas dans vos settings, utiliser :
AUTHENTICATION_BACKENDS = [
    "django.contrib.auth.backends.ModelBackend",
    "authens.backends.ENSCASBackend",
]
  • Préciser l'url de connexion:
LOGIN_URL = reverse_lazy("authens:login")
  • (Optionnel) AuthENS utilise le paramètre Django standard LOGIN_REDIRECT_URL par défaut pour rediriger l'utilisateurice en cas de connexion réussie. Il peut être utile de définir ce paramètre.

Création d'utilisateurices

AuthENS maintient une tables des comptes clipper connus. Cette table est automatiquement mise à jour lors qu'une personne se connecte via le CAS pour la première fois. En revanche lorsqu'un nouveau compte est créé manuellement et que ce compte correspond à un compte clipper, il faut enregistrer ce compte auprès d'AuthENS, autrement le compte Django et le compte clipper seront considérés comme deux comptes différents.

TODO: écrire le helper qui fait une requête sur le LDAP pour trouver tout seul la date de création de compte. Ça ressemblera à quelque chose du genre register_clipper(user, login_clipper).