Projet

Général

Profil

Wiki » Historique » Version 4

Bruno Boiget, 10/10/2013 15:56

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