Single Sign on - PHP - Programmation
Marsh Posté le 19-05-2010 à 15:41:35
Ben OpenID. En GPL, tu trouves la lib PHP-OpenID pour se "connecter" à un serveur OpenID. Si t'as besoin d'avoir ton propre serveur OpenID, tu peux utiliser clamshell (en GPL aussi), bon par contre, l'admin de ce produit est un peu rudimentaire.
Marsh Posté le 19-05-2010 à 16:09:53
sans utiliser OpenID
Bon après investigation, c'est le framework qui régénère le session_id.
Sans ça, ça marche
Marsh Posté le 19-05-2010 à 17:28:08
Si c'est pas indiscret, pourquoi sans OpenID?
Marsh Posté le 19-05-2010 à 22:36:13
3rd Party tout ça.
Je vais faire des tests demain je mettrai plus de détails. C'est bizarre qu'on ne voit aucune implémentation comme ça sur le net.
Marsh Posté le 20-05-2010 à 08:06:57
Le plus "simple" serait d'installer un serveur SSO et de baser l'auth des deux sites dessus...c'est faisable avec CAS par exemple ( http://www.jasig.org/cas ), mais c'est pas exactement un quick fix, ça prend du temps à mettre en place.
Actuellement l'auth se passe comment? Une base de données sur chaque site, avec un table des users?
Comment les données sont synchronisées?
Marsh Posté le 20-05-2010 à 09:44:21
Ben je vois pas pourquoi OpenID ferait pas l'affaire dans ton cas Comme le dit Skeye, tu rajoutes à chacun de tes sites une possibilité de se connecter avec OpenID (donc en plus du mécanisme de connexion classique). Le premier coup, le serveur Clamshell va demander un mdp au user et va dire ok pour la connexion au premier site. Quand le user va vouloir aller sur le 2ième site, il va redonner son openID mais comme il a déjà donné son mdp suite au premier coup, le serveur clamshell va pas lui redemander le mdp et va répondre OK au 2ième site.
Marsh Posté le 20-05-2010 à 09:47:09
pour le moment chaque site a sa propre db avec ses propres users, qui sont parfois dupliqués. La on est en train de réfléchir à les synchroniser. Mais ça ne résout pas le problème étant donné qu'il faut être authentifié sur des sites différents.
Marsh Posté le 20-05-2010 à 09:50:50
ben la session "principale" est gérée au niveau du serveur clamshell qui lui, aura l'ensemble des users.
Marsh Posté le 20-05-2010 à 10:13:48
J'ai fais ce système pour mon soft Astres (cf ma signature). J'ai gardé l'authentification classique (locale à l'appli) et la possibilité de se connecter via OpenID (si le paramètre est activé dans le fichier de conf) : y'a donc 2 formulaires de connexion sur la page d'accueil. Comme c'est pour un intranet d'netreprise, j'ai un peu "triché", j'ai fixé l'url de base du serveur clamshell pour que les users ne puissent se connecter à mon appli qu'en passant par le serveur que je leur impose. Donc ils ne rentrent pas l'url complète, mais juste le dernier bout
Marsh Posté le 20-05-2010 à 10:23:39
mais il te faut un fournisseur d’identité pour utiliser openId ?
Tu ne peux pas gérer tes propres users, si ?
Marsh Posté le 20-05-2010 à 11:26:41
si, c'est ce que je te disais, avec le produit GPL Clamshell C'est lui ton serveur d'identité. Et la lib php-openID, elle aussi en GPL, te permet d'implémenter le protocole OpenID dans tes applis. Si tu connais le protocole, normalement en moins d'1j t'as mis en conformité ton appli.
En général, pour faire le lien entre la réponse du serveur d'identité et le compte dans l'appli d'un user, on utilise l'adresse mail, celle-ci étant présente dans la réponse du serveur. Là encore, j'ai dû "tricher" car, dans mon appli, un user peut avoir plusieurs comptes (comptes de noms différents mais éventuellement même mail), j'ai donc rajouté un champ dans la table users de mon appli qui contient l'url openID du user...
Marsh Posté le 20-05-2010 à 12:02:58
Tu télécharges Clamshell et php-openid. Dans Clamshell, tu crées 2-3 comptes pour tester et dans ton appli, tu implémentes le protocole d'authentification OpenID. dans la lib php, y'a un exemple qui est fourni, suffit de t'en inspirer et de l'intégrer à ton appli (en tenant compte des contraintes de celle-ci, comme dans mon cas, le pb que le match réponse serveur-compte user n'est pas bijectif).
Tu peux éventuellement télécharger mon appli Astres et regarder le fichier /Astres/Support/index.php + les 3 fichiers qui commencent par OpenID dasn /Astres/Support/ pour voir comme j'ai fait. Bon, vue que je maîtrises pas à fond OpenID, c'est probablement pas la meilleure implémentation qui soit, mais ça fonctionne dans mon contexte d'utilisation
Comme source d'info, j'ai utilisé entre autre http://wiki.openid.net/ + un très bon exemple sur developpez.com
Marsh Posté le 20-05-2010 à 12:30:55
Utilise un cache mémoire distribué de type memcached et place tes sessions non pas en fichier mais sur memcached.
Elles seront automatiquement répliquées sur l'intégralité du pool de serveurs utilisant memcached.
C'est fait pour ça !
Marsh Posté le 20-05-2010 à 15:37:14
bon j'ai été sur le tuto de developpez: http://jcrozier.developpez.com/tut [...] hp/openid/
Faut intaller moult truc avec pleins de dépendances dont pleins ne sont plus valides.
la: http://www.openidenabled.com/php-openid/ le truc date de 2007
Ca commence bien
Marsh Posté le 20-05-2010 à 17:23:21
C'est bien le tuto que j'ai utilisé. Côté install, ben juste Clamshell et la lib php-openid, rien de plus et pas de pb dépendances
2007, c'est pas si vieux. Quand t'as un truc qui marche et que le protocole est stable, pas besoin de faire x versions...
Après, memcached est une bonne idée aussi (mais j'ai jamais utilisé). OpenID répond à la problématique de la multiplication des logins/mdp pour tous les sites qu'on utilise. Memcached répond au besoin de partager des données entre des serveurs distants.
Marsh Posté le 20-05-2010 à 20:20:40
Reply
Marsh Posté le 19-05-2010 à 15:01:37
Bonjour,
j'ai une appli qui tourne sur 2 serveurs, une en europe, une aux US.
On veut que quand on est logué en EU on soit logué aussi aux US.
Les deux serveurs ont le même nom de domaine sous différents sous-domaines
Je ne peux pas stocker les sessions dans la DB.
J'ai imaginé la chose suivante:
login en EU ok -> appel à un webservice aux US qui crée une session, change l'id de session avec celui qu'on a en EU et popule la session.
La ça marche
Mais quand je vais sur le Site aux US, le session_id est renouvelé et c'est le drame.
Je cherche un peu partout sur le net mais rien de concluant.
Quelqu'un a déja fait ce genre de chose ?