Projet

Général

Profil

Wiki » Historique » Version 7

Lionel Morin, 08/11/2013 11:48

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 5 Bruno Boiget
* Une librairie python (eoleauthlib)
8 5 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 6 Bruno Boiget
** session locale: l'utilisation utilise son propre cookie de session (la page de login est /application/login)
25 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).
26 1 Bruno Boiget
* Si c'est le cas, le déroulement se poursuit normalement.
27 1 Bruno Boiget
* Si il n'y a pas de session:
28 2 Bruno Boiget
** Le décorateur va rediriger sur la page de login.
29 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).
30 1 Bruno Boiget
31 2 Bruno Boiget
h2. Intégration dans une application.
32 1 Bruno Boiget
33 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):
34 2 Bruno Boiget
35 3 Bruno Boiget
*exemple tiré de l'application genconfig:*
36 2 Bruno Boiget
37 2 Bruno Boiget
<pre>
38 1 Bruno Boiget
39 3 Bruno Boiget
from flask import session, render_template
40 3 Bruno Boiget
from eoleflask.util import make_error_response
41 2 Bruno Boiget
from eolegenconfig import app
42 2 Bruno Boiget
from eoleauthlib.authclient import login_required, init_authentication
43 2 Bruno Boiget
44 2 Bruno Boiget
init_authentication(app)
45 2 Bruno Boiget
46 2 Bruno Boiget
# exemple de route protégée (genconfig)
47 2 Bruno Boiget
@app.route('/')
48 2 Bruno Boiget
@login_required # ajouter ce décorateur à toutes les vues nécessitant une authentification
49 2 Bruno Boiget
def root():
50 2 Bruno Boiget
    """Entry point of the application
51 2 Bruno Boiget
    """
52 2 Bruno Boiget
    return render_template('index.html')
53 2 Bruno Boiget
54 2 Bruno Boiget
@app.route('/user')
55 2 Bruno Boiget
@login_required
56 2 Bruno Boiget
def user():
57 2 Bruno Boiget
    """Route for username retrieval
58 2 Bruno Boiget
    """
59 2 Bruno Boiget
    return(make_json_response({'name':session.get('username', 'anonymous')}))
60 2 Bruno Boiget
61 2 Bruno Boiget
62 2 Bruno Boiget
</pre>
63 1 Bruno Boiget
64 1 Bruno Boiget
L'appel à init_authentication(app) va effectuer les actions suivantes:
65 1 Bruno Boiget
66 3 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)
67 3 Bruno Boiget
* définir le nom de cookie de session (<eoleauth_session> si mode global, <genconfig_session> si mode local)
68 3 Bruno Boiget
* ajouter automatiquement des routes /login et /logout locales à l'application (exemple: /eolegenconfig/login)
69 3 Bruno Boiget
70 3 Bruno Boiget
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
71 3 Bruno Boiget
72 3 Bruno Boiget
exemple de calcul de cette URL pour genconfig:
73 3 Bruno Boiget
74 3 Bruno Boiget
<pre>
75 3 Bruno Boiget
 genconfig_url = url_for('root')
76 3 Bruno Boiget
 logout_url = url_for('logout', return_url=genconfig_url)
77 3 Bruno Boiget
</pre>
78 4 Bruno Boiget
79 4 Bruno Boiget
h2. Configuration de la méthode d'authentification
80 4 Bruno Boiget
81 7 Lionel Morin
Il est possible de spécifier différents paramètres dans le fichier de configuration de l'application.
82 4 Bruno Boiget
83 4 Bruno Boiget
Si rien n'est spécifié, l'application utilise la session partagée gérée par l'application eoleauth.
84 4 Bruno Boiget
85 4 Bruno Boiget
Quel que soit le mode choisi, il est possible de spécifier une liste d'utilisateurs ayant le droit d'accéder à l'application:
86 4 Bruno Boiget
> "ALLOWED_USERS":["user1", "user2", ...]
87 4 Bruno Boiget
88 4 Bruno Boiget
Le paramètre suivant indique si on utilise la session globale, ou une session spécifique à l'application:
89 4 Bruno Boiget
> "EOLEAUTH_MODE":"LOCAL" (GLOBAL par défaut)
90 4 Bruno Boiget
91 4 Bruno Boiget
Dans le cas du mode local, les paramètre suivants sont disponibles:
92 4 Bruno Boiget
93 4 Bruno Boiget
Choix du plugin d'authentification (pour l'instant 'PAMClient' ou 'CASClient')
94 4 Bruno Boiget
> "EOLEAUTH_PLUGIN":"CASClient"
95 4 Bruno Boiget
96 4 Bruno Boiget
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):
97 4 Bruno Boiget
> "CAS_URL":"https://adresse_serveur:8443/"
98 4 Bruno Boiget
99 4 Bruno Boiget
h2. Ajout d'un plugin d'authentification
100 4 Bruno Boiget
101 4 Bruno Boiget
TODO : (voir le code de src/eoleauthlib/client.py et les plugins existants dans src/eoleauthlib/plugins/)