Project

General

Profile

Wiki » History » Version 2

Bruno Boiget, 10/10/2013 03:33 PM

1 1 Bruno Boiget
h1. Eolelask-aaa
2 1 Bruno Boiget
3 1 Bruno Boiget
h2. Principe général:
4 1 Bruno Boiget
5 1 Bruno Boiget
Eoleflask-aaa comprend une 
6 1 Bruno Boiget
7 1 Bruno Boiget
> Une librairie python (eoleauthlib)
8 1 Bruno Boiget
> Une application 'racine' (eoleauth) à intégrer dans eoleflask
9 1 Bruno Boiget
10 1 Bruno Boiget
l'application est montée comme première application par eoleflask, et comporte 3 urls:
11 1 Bruno Boiget
12 1 Bruno Boiget
/login : page utilisée pour se connecter et créer une session globale (voir plus loin)
13 1 Bruno Boiget
/logout : page de déconnexion pour la session globale
14 1 Bruno Boiget
/eoleauth : affiche le nom d'utilisateur courant
15 1 Bruno Boiget
16 1 Bruno Boiget
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)
17 1 Bruno Boiget
18 2 Bruno Boiget
> 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.
19 2 Bruno Boiget
20 1 Bruno Boiget
Le principe de fonctionnement est d'importer une fonction d'initialisation et un décorateur (pour les fonctions des vues) dans les applications.
21 2 Bruno Boiget
22 2 Bruno Boiget
* La fonction d'initialisation va mettre en place la gestion des sessions et des cookies. 2 modes sont disponibles pour les cookies:
23 2 Bruno Boiget
** session globale: toutes les applications utilisant ce mode partagent une même session (la page de login est /login)
24 1 Bruno Boiget
* 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).
25 1 Bruno Boiget
* Si c'est le cas, le déroulement se poursuit normalement.
26 1 Bruno Boiget
* Si il n'y a pas de session:
27 2 Bruno Boiget
** Le décorateur va rediriger sur la page de login.
28 2 Bruno Boiget
** 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).
29 1 Bruno Boiget
30 2 Bruno Boiget
h2. Intégration dans une application.
31 1 Bruno Boiget
32 2 Bruno Boiget
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):
33 2 Bruno Boiget
34 2 Bruno Boiget
*exemple dans le cas de genconfig:*
35 2 Bruno Boiget
36 2 Bruno Boiget
<pre>
37 2 Bruno Boiget
38 2 Bruno Boiget
from eolegenconfig import app
39 2 Bruno Boiget
from eoleauthlib.authclient import login_required, init_authentication
40 2 Bruno Boiget
41 2 Bruno Boiget
init_authentication(app)
42 2 Bruno Boiget
43 2 Bruno Boiget
# exemple de route protégée (genconfig)
44 2 Bruno Boiget
@app.route('/')
45 2 Bruno Boiget
@login_required # ajouter ce décorateur à toutes les vues nécessitant une authentification
46 2 Bruno Boiget
def root():
47 2 Bruno Boiget
    """Entry point of the application
48 2 Bruno Boiget
    """
49 2 Bruno Boiget
    return render_template('index.html')
50 2 Bruno Boiget
51 2 Bruno Boiget
@app.route('/user')
52 2 Bruno Boiget
@login_required
53 2 Bruno Boiget
def user():
54 2 Bruno Boiget
    """Route for username retrieval
55 2 Bruno Boiget
    """
56 2 Bruno Boiget
    return(make_json_response({'name':session.get('username', 'anonymous')}))
57 2 Bruno Boiget
58 2 Bruno Boiget
59 2 Bruno Boiget
</pre>
60 2 Bruno Boiget
61 2 Bruno Boiget
L'appel à init_authentication(app) va effectuer les actions suivantes:
62 2 Bruno Boiget
63 2 Bruno Boiget
- 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)
64 2 Bruno Boiget
- définir le nom de cookie de session (<eoleauth_session> si mode global, <genconfig_session> si mode local)
65 2 Bruno Boiget
- ajouter automatiquement des routes /login et /logout locales à l'application (exemeple: /eolegenconfig/login)