Exemple d'intégration de Cerbere dans une application Django
Sauf 127.0.0.1 pour les tests, seuls les sous-domaines du MTES-MCT autorisés, par exemple .beta.gouv.fr
, .e2.rie.gouv.fr
et .developpement-durable.gouv.fr
, peuvent être utilisés avec Cerbère.
Sinon vous aurez le message d'erreur au login: Erreur à l'authentification. Adresse demandée invalide: ...
.
Installation du client django-cas-ng:
pip install django-cas-ng
Dans le fichier des settings,
- ajouter le client CAS dans les applis installées :
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'django_cas_ng' # client CAS
]
- ajouter le client CAS dans les middlewares:
MIDDLEWARE = [
'django.middleware.security.SecurityMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware',
'django_cas_ng.middleware.CASMiddleware' # client CAS
]
- ajouter le client CAS dans les backends d'authentification:
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'django_cas_ng.backends.CASBackend' # client CAS
)
- ajouter la conf (url et version) du client CAS:
Deux possibilités de protocoles en fonction des informations que vous souhaitez récupérer du user.
En CAS 2.0, vous ne récupérez que l'id (=email) du user dans la réponse, en plus du ticket.
# CAS config
CAS_SERVER_URL = 'https://authentification.din.developpement-durable.gouv.fr/cas/public'
CAS_VERSION = '2'
En SAML 1.1, vous pourrez récupérer, en plus du ticket, plusieurs attributs du user dans la réponse.
# CAS config
CAS_SERVER_URL = 'https://authentification.din.developpement-durable.gouv.fr/cas/public'
CAS_VERSION = 'CAS_2_SAML_1_0'
Dans les logs, les signals émis à l'authentification du user indiquent tous les attributs fournis par le serveur Cerbère. Les attributs fournis par le serveur Cerbère lors de l'authentification de l'utilisateur en SAML 1.1 sont populés dans un user personnalisé.
L'utilisation de ce dernier est spécifié dans les settings:
AUTH_USER_MODEL = 'cerbere.CerbereUser' # custom Cerbere user
AUTHENTICATION_BACKENDS = (
'django.contrib.auth.backends.ModelBackend',
'cerbere.backends.CerbereCASBackend' # custom backend CAS
)
Pour populer d'autres attributs, il faut enrichir le modèle user personnalisé CerbereUser.
Ensuite il faut ajouter les nouveaux attributs avec les champs ajoutés dans le mapping spécifié dans les settings:
CAS_USERNAME_ATTRIBUTE = 'uid'
CAS_APPLY_ATTRIBUTES_TO_USER = True
CAS_RENAME_ATTRIBUTES = {'UTILISATEUR.ID':'uid', 'UTILISATEUR.LOGIN': 'login', 'UTILISATEUR.NOM':'last_name','UTILISATEUR.PRENOM':'first_name','UTILISATEUR.MEL':'email','UTILISATEUR.CIVILITE':'civilite','UTILISATEUR.TEL_FIXE':'tel_fixe','UTILISATEUR.UNITE':'unite'}
Enfin il faut appliquer les migrations du modèle:
python manage.py migrate
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver
Lancez http://127.0.0.1:8000/
Créer un compte Cerbère si vous n'en avez pas.