Wiki » History » Version 7
Lionel Morin, 11/08/2013 11:48 AM
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/) |