[react-admin] Authentication
cf. https://forge.extranet.logilab.fr/cubicweb/cubes/api
- https://hedgedoc.logilab.fr/IJl0hG_jQ-u3IYBAOt_L0w
- https://hedgedoc.logilab.fr/t38Gq6SDTZOUW5hj4so_4A
Doit être facultative (pour les instances publiques)
Types d'authentification possibles
- cookie HTTP
- jeton
- JWT
- SSO
- SAML
- OAuth
- LDAP
Potentielles sources d'inspiration
-
requests
(Python) - cadriciel Django
Occurrences possibles de l'authentification
- Une seule fois pour toute
- À chaque requête
- Pour une certaine durée
Implémentations possibles
Côté client
- Que le client ait un attribut pour l'authentification, qui si non-nul implémente une interface, avec l'attribut définissable via une méthode.
Côté serveur
- Utiliser ce que fait pyramid.
Implémentation retenue
Utilisation de JWT avec PyJWT.
Côté serveur
- Génération du JWT avec PyJWT lors d'un appel sur la route
/login
. Token envoyé dans le header de réponse sousSet-Cookie
. - Implémentation d'une AuthenticationPolicy basée sur pyramid_jwt.
- CubicWeb essaie toutes les méthodes d'auth enregistrées pour authentifier l'utilisateur à chaque requête.
Côté client
- Ajout automatique du JWT dans un cookie httponly lors d'un appel sur login. Meilleure sécurité que le local storage car non accessible par le JavaScript.
- Sauvegarde de l'état de connexion dans le local storage pour ne pas surcharger le serveur de requête.