Transparent session de l'utilisateur sur plusieurs sites (single sign-on + single sign-off)

J'ai plusieurs sites dans différents domaines: example.com, example.org, mail.example.com
et passport.example.org. Tous les sites sont communes look-and-feel et
doivent partager la même base d'utilisateurs.

Et, dans ce cas extrême, je veux encore tous les sites à de manière transparente (autant que possible)
partager les sessions de l'utilisateur avec la clé suivante propriétés:

  1. Single sign-on. Lorsque l'utilisateur se connecte à passport.example.org et visites
    tout autre site, il doit être traité comme connecté.

    Les utilisateurs connectés obtenir “Bonjour, $username“ salutation en-tête du site et les différents
    menu de navigation, la liste des services auxquels ils ont accès. S'il n'est pas connecté, au lieu
    salut il y a un “Signe” lien pointant vers passport.example.org/signon.

    La liste des domaines de confiance est connu, donc c'est assez simple à mettre en œuvre, soit
    avec OpenID ou avec certains homebrewn protocole léger. Lorsque l'utilisateur frappe d'abord l'
    site, je suis rediriger lui spéciales d'authentification d'extrémité à passport.example.org,
    qui est ensuite silencieusement le redirige en arrière, avec les informations d'identité (ou “non signé”
    identité anonyme) inclus. Pour la plupart des navigateurs, il est complètement transparent.
    Évidemment, je suis en utilisant le nonce les valeurs de lutte contre la redirection de boucles.

  2. Single sign-off. Lorsque l'utilisateur clique sur “sign off” dans l'en-tête de n'importe quel site
    la prochaine fois qu'il visite votre site, il devrait être considéré comme “de ne pas signer”.

    OpenID n'a pas été conçu pour cela. Mon idée (j'ai déjà une partie de travail
    la mise en œuvre) est à envoyer pas l'identité de l'utilisateur, mais “global” jeton de session et de partager
    mondial des séances de table (global_session_token ↔ utilisateur de relation) en DB.

  3. Robots et cookieless-support aux usagers. Les Sites sont d'avoir des espaces publics, ce qui devrait
    être accessible par l'utilisateur-agents, sans le support des cookies.

    De ce fait, la redirection je l'ai mentionné dans (1) devient un problème, parce que pour
    chaque demande de page, je vais finir par jeter l'utilisateur de l'agent d'authentification d'extrémité et à l'arrière.
    Non seulement cela permettra de confondre les robots, mais il va polluer ma session de base de données avec
    morts à la naissance des séances très rapidement. Et je certainement ne voulez pas afficher “hey,
    vous n'avez pas activé les cookies, éloignez-vous!” de la page, ce serait très impoli et
    décevant. Alors que j'ai besoin de prise en charge de cookies pour la connexion, je veux que les utilisateurs librement lire
    ce que les sites sont pour et ainsi de suite — sans aucune restriction.

    Et j'ai explicitement ne pas voulez mettre des Id de session dans les Url, sauf pour certains transparent
    inter-domaine redirections je l'ai mentionné. Je crois que faire de telles est un problème de sécurité
    et juste généralement une Mauvaise Chose.

    Et là, je suis presque à court d'idées.

Ok, je sais que c'est dur, mais Google en fait cela d'une certaine manière avec (google.com,
google.beaucoup de gtld, gmail.com et ainsi de suite), à droite? Donc, cela devrait être
possible.

Je lui en serais reconnaissant pour le protocole de description des idées (qui serait le mieux) ou des liens
de systèmes (code pour lire ou tout simplement des sites pour regarder et apprendre à) déjà
mise en œuvre avec succès quelque chose comme ça.

Pour résumer: Plusieurs domaines, sans racine commune, partagée base d'utilisateurs, authentification unique (single sign-off, pas de cookies pour naviguer de façon anonyme.

Tous les sites sont sur le même réseau (mais reste sur des serveurs différents) et partiellement
partager la même base de données PostgreSQL (au repos dans les différents régimes de la même base de données).
La plupart des sites sont écrits en Python/Django, mais certains d'entre eux sont à l'aide de PHP et Ruby on Rails. Alors que je suis en train de penser à quelque chose de cadre et de la langue agnostique, je suis reconnaissant pour le pointage de toutes les implémentations. Même si je ne vais pas être en mesure de les utiliser, si je vais avoir l'idée de comment c'est fait il y a peut-être que je vais être capable de trouver la mise en œuvre de quelque chose de similaire.

  • Non, il n'est pas difficile. C'est juste un truc, comme la carte-astuces. Une fois que vous savez comment, c'est facile. 🙂
InformationsquelleAutor drdaeman | 2009-06-25