Projet

Général

Profil

Wiki » Historique » Version 3

« Précédent - Version 3/8 (diff) - Suivant » - Version actuelle
Bruno Boiget, 10/10/2013 15:44


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)