Description des modèles, des vues et de l'authentification X509
This commit is contained in:
parent
28b1b0023b
commit
cc8772bbc7
163
README
163
README
|
@ -7,12 +7,167 @@ Remplacement pour les pages de gestion d'Authentic2:
|
|||
- gestion des services
|
||||
- gestion des droits d'accès
|
||||
|
||||
Modèles
|
||||
=======
|
||||
|
||||
authentic2_pratic.models.Collectivity
|
||||
-------------------------------------
|
||||
|
||||
Le champ booléen `is_superuser` indique si les utilisateurs de cette
|
||||
collectivité sont des super-administrateurs. Quand ce champ a la valeur `True`
|
||||
tous les utilisateurs de cette collectivité reçoivent la valeur `True` dans
|
||||
leur champs `is_superuser`.
|
||||
|
||||
authentic2_pratic.models.User
|
||||
-----------------------------
|
||||
|
||||
Il hérite du modèle `django.contrib.auth.models.User` il contient les
|
||||
données utilisateur spécifiques au CDG59. Il est lié à l'objet `Collectivity`
|
||||
via le champs de clé étrangère `collectivity`.
|
||||
|
||||
authentic2_pratic.models.Service
|
||||
--------------------------------
|
||||
|
||||
Il décrit un service proposé par le CDG59. Ce service peut
|
||||
éventuellement utiliser l'authentification d'authentic soit via le protocole
|
||||
SAML 2.0 soit via le protocole OAuth 2.0.
|
||||
|
||||
Les champs `name`, `slug` et `service_url` sont obgligatoires. Le champs
|
||||
`service_url` indique l'URL de base pour accéder au service, c'est l'URL qui
|
||||
sera affichée aux utilisateurs.
|
||||
|
||||
Dans le cas SAML 2.0 le champ `metadata_url` contiendra l'URL des métadonnées
|
||||
du service. Dans le cas OAuth 2.0 les champs oauth2_url et oauth2_key
|
||||
contiendront respecitive l'URL de retour et la clé secrète pour les échanges
|
||||
OAuth 2.0.
|
||||
|
||||
Le champ booléen `is_global` indique si un service est global, dans ce cas les
|
||||
champs `service_url`, 'metadata_url`, `oauth2_url` et `oauth2_key` des
|
||||
instances de ce service seront ignorés et ceux de la définition du service
|
||||
seront utilisés.
|
||||
|
||||
authentic2_pratic.models.ServiceInstance
|
||||
----------------------------------------
|
||||
|
||||
Il permet de déclarer un service au niveau d'une collectivité, les
|
||||
champs sont les mêmes que pour une service à l'exception du champ `is_global`
|
||||
qui est absent. Pour pouvoir donner accès à un service à un utilisateur il est
|
||||
impératif d'en créer une instance lié à sa collectivité, créer un service n'est
|
||||
pas suffisant.
|
||||
|
||||
authentic2_pratic.models.Access
|
||||
-------------------------------
|
||||
|
||||
Il indique l'autorisation pour un utilisateur d'accèder à une instance de
|
||||
service ou simplement de voir ce service dans sa page d'accueil dans le cas
|
||||
d'un service sans authentification lié à authentic.
|
||||
|
||||
Il est lié à un utilisateur via le champ `user` et à une instance de service
|
||||
via le champ `service_instance`. La simple existence de cet objet indique
|
||||
l'ouverture de ce service à cet utilisateur.
|
||||
|
||||
URLs
|
||||
====
|
||||
|
||||
/manage/ - liste des collectivités
|
||||
/manage/<collectivite>/ - menu services, utilisateurs et autorisations
|
||||
/manage/<collectivite>/services/ - services
|
||||
/manage/<collectivite>/utilisateurs/ - utilisateurs
|
||||
/manage/
|
||||
--------
|
||||
|
||||
Pour un super-administrateur, elle contient un lien vers la gestion des
|
||||
collectivités et vers la gestion des services.
|
||||
|
||||
Pour un administrateur de collectivité elle contient trois liens profond vers
|
||||
la gestion des utilisateurs, des instances de service et des accréditations
|
||||
pour cette collectivité.
|
||||
|
||||
/manage/collectivities/
|
||||
----------------------
|
||||
|
||||
Cette vue affiche la liste des collectivités, elle n'est accessible qu'à un
|
||||
super-administrateur.
|
||||
|
||||
/manage/collectivitiss/<id>/
|
||||
---------------------------
|
||||
|
||||
Cette vue permet d'éditer les informations sur une collectivité, elle n'est
|
||||
accéssible qu'à un super-administrateur. Elle contient trois liens vers la
|
||||
gestion des utilisateurs, des instances de service et des accréditations pour
|
||||
cette collectivité. Il est aussi possible via une boite de dialogue de créer
|
||||
une nouvelle collectivité.
|
||||
|
||||
/manage/services/
|
||||
-----------------
|
||||
|
||||
Cette vue liste les services. Chaque service DOIT avoir un nom, un identifiant
|
||||
et une URL de base. Il peut aussi avoir optionnellement une adresse pour ses
|
||||
méta-données SAML ou une adresses de retour OAuth 2.0 ainsi qu'un identifiant et
|
||||
une clé secrète (client_id et client_secret en terminologie OAuth2.0).
|
||||
|
||||
/manage/cll<collectivite>/utilisateurs/ - utilisateurs
|
||||
/manage/<collectivite>/autorisations/ - autorisations
|
||||
|
||||
Authentification X509
|
||||
=====================
|
||||
|
||||
Un certificat X509 peut être associé à au maximum une collectivité et
|
||||
plusieurs utilisateurs.
|
||||
|
||||
Si un utilisateur présente un certificat de
|
||||
collectivité, il peut se connecter avec son login et son mot de passe avec un
|
||||
niveau d'authentification supérieur, nommé 'ssl-collectivity' au niveau
|
||||
d'authentic et ayant le code SAML suivant:;
|
||||
|
||||
urn:cdg59.fr:names:tc:SAML:2.0:ac:classes:X509Collectivity
|
||||
|
||||
Si un utilisateur présente un certificat lié à un utilisateur il est
|
||||
automatiquement connecté avec un niveau d'authentification 'ssl'. Après une
|
||||
première auto-connexion, l'auto-connexion est désactivé durant 10 minutes,
|
||||
pendant ce temps l'utilisateur pourra se déconnecter puis se reconnecter en
|
||||
utilisant une des autres méthodes d'authentification.
|
||||
|
||||
L'association d'un certificat se fait en recopiant dans les champs
|
||||
`certificate_issuer_dn` et `certificate_subject_dn` des objets
|
||||
`authentic2_pratic.models.Collectivity` ou `authentic2_pratic.models.User` les
|
||||
nom distingués de l'émetteur et du sujet du certificat tels qu'ils sont
|
||||
exportés par le serveur web hébergeant authentic
|
||||
|
||||
Le nom des clés d'environnement contenant les noms distingués de l'émetteur et
|
||||
du sujet du certificat sont configurés dans le fichier
|
||||
`authentic2_pratic/app_settings.py`. Ils sont adaptés à une utilisant
|
||||
d'authentic avec mod_wsgi, mod_scgi, mot_python ou mod_fcig sous Apache ou bien
|
||||
les modules SCGI ou FCGI de NGinx. Si authentic est lancé dans un conteneur
|
||||
python comme gunicorn, les variables d'environnement SSL devront être recopié
|
||||
dans des entêtes HTTP et ces entêtes HTTP déclaré dans la configuration
|
||||
d'authentic. Par exemple avec nginx on pourra utiliser cette configuration au
|
||||
niveau du virtualhost::
|
||||
|
||||
ssl_verify_client optional;
|
||||
ssl_client_certificate autorites_de_certifications_autorises.pem;
|
||||
|
||||
location / {
|
||||
proxy_pass http://localhost:8000;
|
||||
proxy_set_header ssl-client-dn $ssl_client_s_dn;
|
||||
proxy_set_header ssl-issuer-dn $ssl_client_i_dn;
|
||||
proxy_set_header ssl-client-verify $ssl_client_verify;
|
||||
}
|
||||
|
||||
et la configuration suivante dans le fichier `config.py` d'authentic::
|
||||
|
||||
A2_PRATIC_X509_KEYS = {
|
||||
'subject_dn': 'HTTP_SSL_CLIENT_DN',
|
||||
'issuer_dn': 'HTTP_SSL_ISSUER_DN',
|
||||
'verify': 'HTTP_SSL_CLIENT_VERIFY',
|
||||
}
|
||||
|
||||
Dans les formulaires d'édition d'un utilisateur ou d'un collectivité il est
|
||||
possible de configurer les champs concernant les noms distingués en
|
||||
téléchargeant directement le certificat de cette utilisateur, OpenSSL sera
|
||||
utilisé pour analyser le certificat et en extraire les valeurs des noms
|
||||
distingués.
|
||||
|
||||
ATTENDION: la simple configuration des noms distingués d'un certificat n'est
|
||||
pas une sécurité, il faut en plus que la chaîne de confiance du certificat ait
|
||||
été préalablement validée par la terminaison SSL --- généralement le serveur
|
||||
Web, pour nginx en utilisant les directives `ssl_verify_client` avec les
|
||||
valeurs `optional` ou FIXME et en définissant les certificats racines des
|
||||
autorités de certificats de confiance via la directive
|
||||
`ssl_client_certificate`.
|
||||
|
|
Reference in New Issue