Projet

Général

Profil

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)
    • session locale: l'application utilise son propre cookie de session (la page de login est /application/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)

Configuration de la méthode d'authentification

Il est possible de spécifier différents paramètres dans le fichier de configuration de l'application.

Si rien n'est spécifié, l'application utilise la session partagée gérée par l'application eoleauth.

Quel que soit le mode choisi, il est possible de spécifier une liste d'utilisateurs ayant le droit d'accéder à l'application:

"ALLOWED_USERS":["user1", "user2", ...]

Le paramètre suivant indique si on utilise la session globale, ou une session spécifique à l'application:

"EOLEAUTH_MODE":"LOCAL" (GLOBAL par défaut)

Dans le cas du mode local, les paramètre suivants sont disponibles:

Choix du plugin d'authentification (pour l'instant 'PAMClient' ou 'CASClient')

"EOLEAUTH_PLUGIN":"CASClient"

adresse de base du serveur CAS dans le cas du plugin CASClient (plugin adapté à EoleSSO, des paramètres seront ajoutés pour généraliser le fonctionnement):

"CAS_URL":"https://adresse_serveur:8443/"

Ajout d'un plugin d'authentification

TODO : (voir le code de src/eoleauthlib/client.py et les plugins existants dans src/eoleauthlib/plugins/)