Wiki » Historique » Version 8
Lionel Morin, 27/03/2014 09:09
| 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 | 8 | Lionel Morin | ** session locale: l'application 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/) |