Animint

  Anime & manga

 
 
“Animint traite des dessins animés japonais et du manga. Outre ce blog, le site comporte plusieurs milliers de pages de texte illustré.”

Réflexions de webmestre (3/4): Faire du single sign on à partir de phpBB3

Par le :: Webmastering

Il est habituel de trouver des ponts avec phpBB pour différentes applications open source en PHP, qui utilisent ainsi la base utilisateurs des forumeurs comme unique référence pour les noms d'utilisateurs et les mots de passe. Cela évite de dupliquer les comptes mais ne règle pas le problème de devoir s'authentifier deux fois, une fois sur l'application et une deuxième fois sur l'application, la session n'étant pas conservée entre les pages des deux produits.

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.


S.S.O. phpbb3

Discuter de ce billet sur le forum - - Laisser un commentaire »

Cet article vous a plu?

Faites-le connaître ou votez pour cet article sur les sites suivants :

  • anime manga aggregator sama
  • Partager sur del.li.cious
  • Partager sur Facebook
  • Partager sur Google

Ajoutez votre commentaire:

Merci de bien vouloir soigner votre orthographe et de proscrire le style SMS.


Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

 

↑ Haut de page