Wiki » History » Version 3
« Previous -
Version 3/8
(diff) -
Next » -
Current version
Bruno Boiget, 10/10/2013 03:44 PM
Eolelask-aaa¶
Principe général:¶
Eoleflask-aaa comprend une
Une librairie python (eoleauthlib)
Une application 'racine' (eoleauth) à intégrer dans eoleflask
l'application est montée comme première application par eoleflask, et comporte 3 urls:
/login : page utilisée pour se connecter et créer une session globale (voir plus loin)
/logout : page de déconnexion pour la session globale
/eoleauth : affiche le nom d'utilisateur courant
La librairie offre différents plugins pour l'authentification (actuellement PAM-login et CAS) et plusieurs modes de gestion des sessions (fichiers côté serveur ou Redis en mode socket)
Rqe: pour l'instant, le plugin CAS ne gère pas correctement la déconnexion centralisée. Si le serveur CAS envoie une requête de déconnexion, la session ne sera pas fermée.
Le principe de fonctionnement est d'importer une fonction d'initialisation et un décorateur (pour les fonctions des vues) dans les applications.
- La fonction d'initialisation va mettre en place la gestion des sessions et des cookies. 2 modes sont disponibles pour les cookies:
- session globale: toutes les applications utilisant ce mode partagent une même session (la page de login est /login)
- Lors de l'accès à une vue protégée, le décorateur va regarder si la session est ouverte (nom d'utilisateur présent).
- Si c'est le cas, le déroulement se poursuit normalement.
- Si il n'y a pas de session:
- Le décorateur va rediriger sur la page de login.
- Après authentification (gérée par le plugin d'authentification), la session est créée et l'utilisateur est redirigé sur la page d'origine (le décorateur va réitérer le processus de vérification).
Intégration dans une application.¶
Pour activer l'authentification dans une application eoleflask, mettre le code suivant dans le fichier de déclaration des vues (views.py en général):
exemple tiré de l'application genconfig:
from flask import session, render_template from eoleflask.util import make_error_response from eolegenconfig import app from eoleauthlib.authclient import login_required, init_authentication init_authentication(app) # exemple de route protégée (genconfig) @app.route('/') @login_required # ajouter ce décorateur à toutes les vues nécessitant une authentification def root(): """Entry point of the application """ return render_template('index.html') @app.route('/user') @login_required def user(): """Route for username retrieval """ return(make_json_response({'name':session.get('username', 'anonymous')}))
L'appel à init_authentication(app) va effectuer les actions suivantes:
- initialiser l'interface de gestion des sessions (par défaut, Redis si un serveur Redis est disponible, sinon les sessions sont stockées dans /root/.eoleauth)
- définir le nom de cookie de session (<eoleauth_session> si mode global, <genconfig_session> si mode local)
- ajouter automatiquement des routes /login et /logout locales à l'application (exemple: /eolegenconfig/login)
Pour gérer la déconnexion, mettre un lien ou bouton dans l'application qui fasse appel à l'url de logout. Par défaut, la déconnexion renvoie une page vide indiquant que la session est fermée. Il est possible de passer un paramètre return_url pour spécifier une URL sur laquelle rediriger après déconnexion
exemple de calcul de cette URL pour genconfig:
genconfig_url = url_for('root') logout_url = url_for('logout', return_url=genconfig_url)