2009-01-29 7 views
0

Je dois créer plusieurs applications Rails pour un client. Je voudrais leur donner tous le même système d'authentification de l'utilisateur afin que les utilisateurs n'auront pas à se souvenir des identifiants de connexion distincts pour chaque application. Ce sont des applications strictement internes. OpenID n'est pas une option pour cette organisation.Comment puis-je faire en sorte que plusieurs applications utilisent le même système d'authentification?

Je pense à créer une application Rails centrale pour gérer l'authentification. Les autres applications prendront l'identifiant et le mot de passe soumis et enverront une requête à l'application auth et récupéreront peut-être une chaîne de YAML décrivant l'utilisateur et ses rôles.

Est-ce une approche raisonnable?

Y at-il une solution standard à ce problème dont je devrais être au courant?

(Notez que, en raison des contraintes d'organisation que je dois résoudre cela sur mon propre en utilisant un serveur Linux RedHat 5 fonctionner MySQL, Apache et Rails.)

Répondre

3

me semble raisonnable. Je pourrais configurer l'application d'authentification telle que vous la décrivez, puis utiliser ActiveResource dans les applications client pour accéder à l'authentification en tant que service Web. Vous pourriez essentiellement avoir votre propre système de style OpenID.

Si vous n'avez jamais utilisé ActiveResource auparavant, les Railscasts 94 et 95 sont un bon point de départ.

1

Cela ressemble en fait à une approche raisonnable. Il y a beaucoup de rails plugins qui gèrent assez bien l'authentification. Vous pouvez simplement exposer cette fonctionnalité à l'aide de vos propres méthodes d'authentification personnalisées appelées via le service Web. Si vous voulez vous faire plaisir, vous pouvez écrire une API dans votre application Rails (authentification) en utilisant HTTParty et la partager avec les autres.

2

Il semble que ce que vous cherchez vraiment soit un système de connexion unique, et non un système d'identification partagé. La principale différence est qu'avec ce dernier, l'utilisateur devra s'authentifier à nouveau à chaque application, alors qu'avec le premier, il ne devra se connecter qu'une seule fois, puis passer d'une application à l'autre.

Malheureusement, il faut travailler un peu pour intégrer ces applications à vos rails. Voici un excellent point de départ: http://www.ja-sig.org/products/cas/

1

a été construit pour qu'OpenID être décentralisé, de sorte que vous pourrait en fait host your own fournisseur OpenID pour un usage interne. Je ne vois pas la nécessité de réinventer la roue si vous suivez une route similaire.

0

Il ne semble pas que l'organisation soit trop grande, mais si un répertoire LDAP est en place, vous pouvez l'utiliser pour les informations d'identification. Bien que, comme mentionné ci-dessus, ceci ne résoudrait pas le problème de l'utilisateur devant signer individuellement sur chaque application.

1

J'ai une solution folle pour cela, j'ai envisagé quelque chose de mon propre que j'ai besoin de faire comme ça.

Dans la configuration par défaut de Rails, il envoie les données de session à l'utilisateur final sous forme de cookies. Pour la plupart, vous devez mettre à peu près rien dans la session, sauf pour l'identité de l'utilisateur qui s'est connecté et authentifié à droite? OK, et si toutes les applications que vous vouliez voir connectées utilisaient exactement la même clé secrète dans leur fichier config/environment.rb?C'est la chaîne de 120 caractères qui est utilisée pour signer le cookie afin que l'utilisateur ne puisse pas changer les cookies et les renvoyer sans être attrapé. Si chaque application de votre groupe avait la même clé secrète et ils étaient tous sous le même domaine alors toutes les applications recevraient le même cookie et tout le monde penserait qu'ils étaient le seul à l'envoyer. Chacun disait: «Ouais, c'est l'utilisateur n ° 252. Je mets ce numéro d'utilisateur dans la session moi-même, donc je sais que c'est lui, je sais qu'il est connecté et je peux l'utiliser pour chercher son/ses détails. "

Note: La divulgation complète, j'ai pas essayé encore, mais j'ai toutes les raisons de croire que cela fonctionnerait.

Questions connexes