Service d’Authentification Centralisé (CAS)

Un CAS est déployé sur la Note Kfet. Il est accessible à l’adresse https://note.crans.org/cas/. Il a pour but uniquement d’authentifier les utilisateurs via la note et ne communique que peu d’informations.

Configuration

Le serveur CAS utilisé est implémenté grâce au paquet django-cas-server. Il peut être installé soit par PIP soit sur une machine Debian via apt install python3-django-cas-server.

On ajoute ensuite cas_server aux applications Django installées. On n’oublie pas ni d’appliquer les migrations (./manage.py migrate) ni de collecter les fichiers statiques (./manage.py collectstatic).

On enregistre les routes dans note_kfet/urls.py :

urlpatterns.append(
     path('cas/', include('cas_server.urls', namespace='cas_server'))
 )

Le CAS est désormais déjà prêt à être utilisé. Toutefois, puisque l’on utilise un site Django-admin personnalisé, on n’oublie pas d’enregistrer les pages d’administration :

if "cas_server" in settings.INSTALLED_APPS:
    from cas_server.admin import *
    from cas_server.models import *
    admin_site.register(ServicePattern, ServicePatternAdmin)
    admin_site.register(FederatedIendityProvider, FederatedIendityProviderAdmin)

Enfin, on souhaite pouvoir fournir au besoin le pseudo normalisé. Pour cela, on crée une classe dans member.auth :

class CustomAuthUser(DjangoAuthUser):
    def attributs(self):
        d = super().attributs()
        if self.user:
            d["normalized_name"] = Alias.normalize(self.user.username)
        return d

Puis on source ce fichier dans les paramètres :

CAS_AUTH_CLASS = 'member.auth.CustomAuthUser'

Utilisation

Le service est accessible sur https://note.crans.org/cas/. C’est ce lien qu’il faut donner à votre application.

L’application doit néanmoins être autorisée à accéder au CAS. Pour cela, rendez-vous dans Django-admin (https://note.crans.org/cas/admin/), dans Service Central d'Authentification/Motifs de services, ajoutez une nouvelle entrée. Choisissez votre position favorite puis le nom de l’application.

Les champs importants sont les deux suivants :

  • Motif : il s’agit d’une expression régulière qui doit reconnaitre le site voulu. Par exemple, pour autoriser Belenios (https://belenios.crans.org), on rentrera le motif ^https?://belenios\.crans\.org/.*$.

  • Champ d’utilisateur : C’est le pseudo que renverra le CAS. Par défaut, il s’agira du nom de note principal, mais il arrive parfois que certains sites supportent mal d’avoir des caractères UTF-8 dans le pseudo. C’est par exemple le cas de Belenios. On rentrera alors normalized_name dans ce champ, qui correspond à la version normalisée (sans accent ni espace ni aucun caractère non-ASCII) du pseudo, et qui suffit à identifier une personne.

On peut également utiliser le Single log out si besoin.