Animint
Anime & manga
Réflexions de webmestre (3/4): Faire du single sign on à partir de phpBB3
Par Pazu d'Animint le dimanche 13 avril 2008 20:39 :: Webmastering
Pour avoir une phase unique d'authentification et être reconnu sur toutes les pages, il faut un peu plus d'éléments. Quand vous utilisez des outils clef en main, il est difficile de faire cohabiter des systèmes différents de gestion de sessions. Certes vous pouvez installer un produit tiers qui s'en charge mais ce n'est pas sans incidence sur les autres applications. En revanche, si vous avez plus de liberté et que vous pouvez adopter pleinement le système de gestion de sessions de phpBB, l'affaire est plus aisée.
La solution bateau consiste à insérer, dans toutes les entêtes de vos pages PHP personnelles, un certains nombre d'appels et d'inclusions de fichiers PHP du forum. Vous gérez ainsi la session au format particulier phpBB avec le même niveau de complexité, les mêmes fonctionnalités et les mêmes exigences de sécurité.
La méthode a aussi comme avantage de suivre les modifications de phpBB, de façon transparente, à moins que les auteurs de phpBB révolutionnent leur code. Votre code à vous hérite automatiquement des modifications apportées dans celui du forum et vous n'avez pas à connaître comment cela fonctionne en détails à l'intérieur des fichiers phpBB. Vous utilisez juste quelques méthodes pour vérifier si un utilisateur est authentifié ou pas, et pour voir qui il est.
La contrainte est quand même de devoir utiliser le pseudo framework lié avec phpBB, si vous voulez en tirer tous les bénéfices, tels que les écrans de login et les redirections automatiques. Si vous voulez lancer des fonctions séparément, vous restez prisonnier de l'enchaînement choisi par phpBB, qui ne vous convient pas forcément. De plus, les fichiers insérés comportent beaucoup de code inutile, si vous voulez seulement gérer les sessions utilisateurs.
L'autre grand inconvénient est que le code de phpBB est linéaire et qu'il se situe au même niveau que celui de vos pages, avec en plus des appels abusifs à des variables globales. Ainsi, si vous avez des références à une base de données via une variable $db, elle a de forte chance d'entrer en conflit avec la variable éponyme avec laquelle travaillent les fichiers phpBB.
Cela peut rapidement devenir un sac de noeuds, à moins que vous choisissiez de transformer votre code en tant que véritable module de phpBB. Là, les instructions devraient être plus cohérentes mais vous devenez liés très fortement au forum, qui devient l'armature de votre site et non plus un élément parmi d'autres.
Pour Animint et la mise en place des profils du site, la solution choisie a été de construire une bibliothèque objet pour gérer les sessions, en extrayant et en adoptant un minimum de code depuis les fichiers phpBB. Si la façon de faire de phpBB change, seul cet objet est à corriger.
Par rapport à la version phpBB 2, un forum en phpBB3 passe par des fonctions plus sécurisées pour gérer les authentifications des personnes. Le mot de passe est non seulement chiffré dans la base mais il est relié à une information temporelle pour empêcher son hackage. Cela se traduit par un code plus complexe et l'essentiel de la reprise du code original dans notre bibliothèque, concerne cette partie.
La gestion des sessions est plus classique même si phpBB ne fait pas appel à la variable $_SESSION et a son propre système de bas niveau à coup d'identifiant passé dans l'url ou dans les cookies. Après une authentification réussie d'un utilisateur, il créée une session et enregistre son entrée dans la table phpbb_sessions de la base forum et il vérifie régulièrement dans le temps, la cohérence entre cette entrée stockée et l'identifiant de session qui est véhiculé de page en page.
Au niveau des cookies, cela se traduit par une trace de l'identifiant de session ainsi que de l'identifiant utilisateur. Si vous avez choisi d'être reconnu par le forum à chaque visite, sans avoir à vous reconnecter, vos cookies comportent également une clef qui sert à vous revalider automatiquement. Cette clef correspond également à une entrée dans la base du forum, dans la table phpbb_sessions_keys, cette fois-ci.
Dans notre cas, il a donc fallu reprendre la mécanique d'authentification, la méthode de création de session, puis de gérer la transmission de l'identifiant entre les pages, le tout devant fonctionner que l'on se connecte sur le forum ou à partir d'une page du site.

Discuter de ce billet sur le forum - Lien permanent - Laisser un commentaire »
Cet article vous a plu?
Faites-le connaître ou votez pour cet article sur les sites suivants :