Discussion : proposition d'alternative à django-allauth-ens #1
Labels
No labels
documentation
Doing
Doing
Good first issue
To Do
To Do
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: DGNum/authens#1
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Contexte
On a besoin un peu partout d'auth CAS + exté, typiquement sur gestioCOF, le gestioBDS à venir, l'annuaire, le wiki, etc. django-allauth-ens propose cette fonctionnalité et gère les conflits de
username
entre comptes extés existants et comptes clippers. Il est possible aussi de gérer la non-unicité des clippers, i.e. le fait que rien n'empêche le SPI de redonner un jour des logins clipper ayant déjà été utilisé par le passé.Problèmes :
Proposition alternative à allauth-ens
Le but de ce dépôt est d'essayer de reprendre les bonnes idées de django-allauth-ens dans une lib plus simple à utiliser et sans la dépendance à allauth. C'est volontairement moins générique pour tenir en peu de lignes code et pouvoir être compris et utilisé facilement.
C'est encore un prototype. J'ouvre cette issue tôt pour avoir un retour critique et une discussion sur le design de base et/ou sur la pertinence de recoder un module d'auth pour l'ENS. Autrement dit, lâchez vous.
Design
On maintient une table
Clipper
qui lie desUser
s Django à un login clipper et une année d'entrée à l'ENS:Ça permet deux choses :
username
d'une personne n'a pas a être égal à son login clipper → si un username est déjà pris quand on veut inscrire quelqu'un avec un clipper, c'est pas grave.entrance_year
permet de lever l’ambiguïté dans le cas théorique où le SPI décide de réutiliser des vieux logins clipper un jour.Authentification
On ajoute un backend d'auth qui connecte par cas en utilisant le champ
uid
de cette table plutôt queUser.username
. À chaque connexion, le CAS nous donnes assez de métadonnées pour connaître la promo de la personne, on en profite pour vérifier que le compte clipper qu'on connaît est toujours valide, c'est à dire si leentrance_year
qu'on a stocké correspond à la promo.Création manuelle d'
User
sJe n'ai pas encore écrit le helper pour faire ça mais quand on veut créer manuellement un
User
avec un login clipper, il faut ajouter une entrée dans la tableClipper
et aller chercher le numéro de promo dans le ldap.Choix discutables ?
Recoder un truc from scratch plutôt qu'essayer d'améliorer
django-allauth-ens
?Je n'ai pas utilisé
django_cas_ng
et j'ai recodé un petit backend d'auth.python-cas
(je ne l'aurais pas fait sinon)django_cas_ng
quand on utilise AuthENSdjango_cas_ng
django_cas_ng
existedjango_cas_ng
, il faut que je regardedjango_cas_ng
maintient une table de tickets qu'il n'a pas l'air d'utiliser, à quoi ça sert à part savoir qui est connecté ? Est-ce qu'on a besoin de ça ?TODO
Fournir un script pour migrer d'une install sans AuthENS → avec AuthENS ?user.email = "{}@clipper.ens.fr".format(uid)
quelque part.strip().lowercase()
avec du texte explicatif sur les méthodes de connexionIndiquer au logout qu'on est déconnecté du site mais pas de CAS. Si on n'aime pas de comportement on peut aussi déconnecter les gens du CASLiens pertinents
python-cas
: https://djangocas.dev/docs/latest/modules/python_cas.htmldjango-cas-ng
: https://djangocas.dev/docs/latest/index.htmlchanged the description
→ Utiliser le mail fourni par le CAS.
Sur le principe, j'aime beaucoup 😃
Quelques remarques :
ProxyGrantingTicket
) sont un usecase qui nous est inutile : https://apereo.github.io/cas/5.0.x/installation/Configuring-Proxy-Authentication.htmldjango_cas_ng
: je ne pense pas que ce soit nécessaire, le code est assez succint tel quel...→ Remarque de ludo sur merle : #2
mentioned in issue #3
changed milestone to %1
changed the description
marked the checklist item J'ai oublié le
.strip().lowercase()
as completedmarked the checklist item Faire des vrais templates : as completed
marked the checklist item Faire des vrais templates : as incomplete
marked the checklist item Indiquer au logout qu'on est déconnecté du site mais pas de CAS. Si on n'aime pas de comportement on peut aussi déconnecter les gens du CAS as completed
marked the checklist item Faire des vrais templates : as completed
marked the checklist item Gérer les adresses emails : ajouter un
user.email = "{}@clipper.ens.fr".format(uid)
quelque part as completedchanged the description
marked the checklist item Formulaire de récupération de mot de passe as completed