OpenSSO/OpenAM alternatives
Avertissement! Je suis un peu d'un voyage de pêche d'ici, et je ne suis même pas sûr si les questions que je pose la question entièrement du sens. S'il vous plaît être gentil avec vos réponses! 🙂
J'ai récemment participé à un projet qui est actuellement basé sur Java + Linux + Tomcat + MySQL. Maintenant, le système est fondamentalement juste un site web avec quelques tâches cron dans l'arrière-sol pour se déplacer de quelques données, etc. Dans le travail avec le chef de produit à développer en priorité carnet de commandes, il est clair à partir de ce qu'il veut faire que j'ai besoin de commencer à développer une architecture orientée service (SOA <-- buzz mention d'avertissement attention!), et je vais finir avec un mélange de serveurs web et les serveurs d'applications. Note: je suis fortement envisager de déménager à Glassfish v3.
Actuellement, l'authentification et les autorisations sont gérées dans du code Java avec les informations utilisateur stockées dans la base de données MySQL. Au minimum, il me semble que j'ai besoin de partager cette sortie dans un service d'authentification (sinon, va se retrouver avec un tas de code dupliqué partout dans le lieu de gérer l'authentification et les autorisations).
J'ai été regarder dans single sign-on (SSO) type des solutions et de faire de la recherche. De ce que j'ai pu rassembler, OpenSSO a été officiellement abandonné par Oracle, mais repris par ForgeRock et est maintenant appelé OpenAM. Cela semble être très proche de ce que je veux, mais puisque j'ai déjà une base de données MySQL basé sur le système, je préfère avoir quelque chose qui la prend en charge (ou un autre type de SGBDR). J'ai trouvé ceci sur un Débordement de Pile et tout semble indiquer que c'est essentiellement LDAP ou rien.
Mes questions sont:
Ce que d'autres options sont là pour OpenSSO/OpenAM? LDAP est le chemin à parcourir? Remarque: la réalisation d'un “OpenAM vs” recherche google ne donne pas beaucoup. Les gens ont tendance à “rouler leur propre”?
Des idées/suggestions/liens sur ce sujet, qui vous aidera à éduquer me sera grandement apprécié. Merci d'avance pour votre patience et votre aide.
Vous devez vous connecter pour publier un commentaire.
Êtes-vous intégrer les applications existantes, ou voulez-vous simplement à l'appui de vos propres applications?
Vous êtes à la recherche pour réel SSO ou tout simplement des informations d'identification partagée? SSO le fait de se connecter à une application unique, et d'avoir eu cette identification se propager à une autre application (comme la connexion à Gmail et d'être automatiquement connecté à Blogger). Partagé des informations d'identification, vous pouvez utiliser le même nom d'utilisateur et mot de passe pour toutes les applications, mais le titre lui-même n'est pas automatiquement propagé.
LDAP est un système commun utilisé pour gérer un partage d'informations d'identification. De nombreux systèmes vous permettent de point de leur authentification magasin à un serveur LDAP.
Par exemple, si vous avez plusieurs applications déployées dans un conteneur Java EE, et aussi, disons, un serveur de courrier électronique et de messagerie basé sur le web client, l'ensemble de ces diverses applications qui pourrait être dirigé vers le même serveur LDAP et vos utilisateurs ont un seul login et mot de passe pour tous les systèmes, toutes écrites dans des langues différentes, le tout déployé sur différentes machines. C'est un pain et le beurre en cas d'utilisation de LDAP, et à peu près chaque système peut gérer cette sortie de la boîte. Glassfish et Tomcat peut à la fois facilement valider sur un serveur LDAP. Donc, peut-Apache (serveur Web), Postgres (Base de données), Postfix (e-mail), etc. etc.
Donc, si vous voulez simplement un partage d'informations d'identification, vous obtenez ce "gratuitement", pour l'instant, par l'installation d'un serveur LDAP. LDAP est un peu un animal différent de quelque chose comme un SGBD, mais une fois que vous l'étudier un peu et "get it", c'est vraiment très gentil. OpenLDAP est un populaire serveur LDAP, mais je suis partie à l'ApacheDS.
La façon de le mettre en place que dans un conteneur Java EE est de mettre en place un "Royaume". GF et Tomcat deux ont LDAP royaumes de la boîte, j'imagine que le reste à faire. Mais la noix, c'est que vous devez utiliser Java EE de sécurité à l'effet de levier du Royaume.
Voir le détail avec un Java EE Domaine, c'est que c'est un aspect du CONTENANT, et non pas l'application. Tout comme un pool de connexions est un conteneur de ressources que votre application tire parti. La plupart des gens veulent la sécurité d'être une partie de leur demande où ils sentent qu'ils ont plus de contrôle sur elle.
Que c'est bien jusqu'à ce que vous commencez à obtenir un tas de différentes applications et tout le monde est configuré différemment et a séparé les listes d'utilisateurs et les stratégies de mot de passe, etc. etc.
LDAP peut résoudre beaucoup de que, puisque vous les configurer pour utiliser les mêmes informations d'identification magasin.
Le Domaine remplit que de besoin sur un serveur Java EE. Votre application est configuré pour utiliser un Domaine fourni par le conteneur. Si vous avez plusieurs applications, et un seul Royaume, puis ils ont tous de partager les informations d'identification dans ce Domaine (quel que soit le type de Domaine).
Royaumes peuvent être n'importe quoi: fichiers en fonction des régimes de base, LDAP, etc. Domaines aussi de cluster si le conteneur des clusters (ce qui peut être pratique).
Le côté sombre de Java EE de sécurité, et pourquoi la plupart des applications de l'éviter, c'est que, depuis, encore une fois, le Domaine est la partie du récipient, et non pas l'application, il peut être un peu maladroits à utiliser, et peut-être de ne pas offrir les fonctionnalités que vous aimez en termes de gestion d'utilisateur, mot de passe, politiques, etc.
Mais le côté lumineux de Java EE de sécurité est qu'une fois que vous êtes sous son égide, vous pouvez tirer parti de l'information d'identification dans votre code facilement. Une personne se connecte au site web, et que les informations d'identification peuvent être utilisées dans l'application web, ou automatiquement renvoyés à l'EJB niveau (toujours à distance EJB tier), et l'information est toujours à portée de main.
Vous pouvez pointer votre web applications en un domaine, vous Ejb, web services. Ils ont tous l'effet de levier les mêmes morceaux.
Afin d'obtenir sorte de le meilleur des deux mondes est de tirer parti des conteneur des mécanismes spécifiques pour l'accès des conteneurs de sécurité. C'est l'autre côté obscur de Java EE de sécurité.
Des choses comme les Royaumes, et un accès direct à la sécurité des conteneurs ne sont pas transférables entre les conteneurs. GF est-il différent de Tomcat est-il différent de WebLogic. C'est vraiment proche, mais diffère dans les détails, de sorte que votre code ne sera pas de port de manière transparente.
Le côté lumineux est pour dans applications maison, la plupart des gens tout simplement l'effet de levier le conteneur qu'ils ont, mis un raisonnable abstraction autour du récipient dépendant de code, et de l'appeler jour notant que, oui, ils auront à port ce si et quand ils se déplacent vers un autre conteneur. Mais, dans la pratique. un peu comme une base de données, une fois un conteneur plate-forme est choisie, les gens ont tendance à se blottir serré et le bâton avec elle.
Enfin, Servlet 3.0 (En GF3 et Tomcat 7) normalise plus de la programmation concernant les problèmes de connexion pour les rendre plus portable sur l'ensemble des conteneurs, mais les concepts sous-jacents sont les mêmes.
Maintenant, SSO.
SSO est une bête différente. Mais, la porte, les deux GF et Tomcat soutien SSO pour les applications web. Cela vous permet de vous connecter à une application web et être en mesure d'accéder facilement à d'autres sans avoir à se connecter à eux. Mais le SSO est un peu limitée, car il s'appuie plus fortement sur la sécurité des conteneurs et de son cycle de vie, plutôt que d'un autre plus souple sous le contrôle de l'application. L'esprit, et pas seulement sur les Royaumes (c'est donné), mais sur le conteneur réel FORMULAIRE de connexion, plutôt que d'une coutume programmatique de connexion. FORMULAIRE de connexion n'est pas spectaculaire, mais il est fonctionnel et il fonctionne. Mettre en œuvre un Royaume, de déployer vos applications sur une seule instance de Tomcat ou GF (ou un cluster dans GF 3.1), et vous obtenez de l'authentification unique pour gratuit, donc si c'est important, c'est une sorte de gentil vraiment. C'est la convivialité est bien pour le back-office applications, mais peut-être pas l'internet public.
Si vous voulez une version plus sophistiquée solution d'authentification unique, alors vous avez besoin de regarder des implémentations personnalisées. OpenSSO est l'un de ceux-ci, et il s'appuie sur SAML et de la SAML profil web. Cependant, il en existe d'autres. Il n'y a CAS, Atlassian Cloud, Kerberos, et OAuth ainsi. Ceux-ci sont tous à l'aide de différents protocoles de SAML. Si vous voulez coller avec SAML vous pouvez également regarder Shibboleth, ou même SimpleSAML (SimpleSAML est un serveur PHP qui agit en tant que Fournisseur d'Identité SAML, parmi d'autres choses, mais vous avez encore besoin d'un Fournisseur de Services au sein de vos applications).
Quel que soit le protocole que vous choisissez, le processus est essentiellement le même (les détails ici -- Croix Domaine de Connexion pour se connecter à un utilisateur automatiquement lors d'un transfert d'un domaine à un autre).
Mais le diable est dans les détails. Et, les gars, il y a des diables.
Tous ces systèmes sont complexes. Le SSO est compliqué. Par exemple, maintenant que vous avez une connexion Unique, ce sujet de Single Sign-Out? Qu'en est Seul le Temps? Ce sujet des informations d'identification des changements, tandis que les utilisateurs sont connectés? Ce sujet d'une STS (Secure Token Service) pour vos Services Web? (STS offre un délégué mécanisme d'authentification pour les services web.)
SAML vous présente tout un tas de nouveaux mots de vocabulaire, et a beaucoup de configuration. Il n'est pas facilement ramassé étant donné que la documentation n'est pas stellaires et s'appuie beaucoup sur les normes des documents qui parlent à un niveau plus élevé de génériques choses, et non à vous et à votre application spécifique.
Si vous n'avez pas besoin vraiment besoin de l'authentification unique, alors vous aurez probablement se contenter de quelque chose comme une centrale LDAP magasin et va à partir de là.
Tout ce que dit, par exemple, les applications prennent en charge les DB et backend LDAP. Ils utilisent Glassfish, et Java EE de sécurité. Nous contrôlons entièrement l'expérience utilisateur. Nous avons également en charge l'authentification unique via SAML (nous avons écrit notre propre Identité et Fournisseurs de Services), et nous avons à la fois des informations d'identification partagée via LDAP et SSO à travers Java et d'autres applications, à l'aide de notre code et de la troisième partie du code. Le bon côté c'est que c'est toutes les normes de base. Le côté sombre est que les normes sont communiqués en anglais, et l'anglais est sujette à interprétation.
Je dis cela simplement à dire qu'il peut être fait. J'ai également écrit ad hoc, à l'arrière de la serviette implémentations SSO, les deux même domaine et de la croix de domaine (domaine est simple avec salle de cookie) à l'aide de simple Servlet Filtres. Stratégies de mot de passe, le mot de passe de récupération, de garder en vie des minuteurs, des fenêtres multiples de délai d'attente et de gestion de session (c'est marrant), les rôles, les privilèges, etc. etc. Été là, fait cela.
Aussi, je m'en voudrais de ne pas mentionner le Ressort et la Sécurité, qui offre tout cela sur le dessus du Printemps. Je n'ai pas utilisé ça (je ne suis pas un Printemps de la personne), mais ces gens ne savent ce qu'ils font alors, il vaut la peine de regarder.
The dark side of Java EE security, and why most apps avoid it is that, since, again, the Realm is part of the container, and not the application
- Pour cette raison JASPIC a été ajoutée à Java EE 6. Elle permet de totalement portable auth modules qui peuvent être installés soit dans l'application (et alors pleinement partie de l'application), ou comme le conteneur spécifique royaumes à l'intérieur du conteneur. Voir arjan-tijms.blogspot.com/2012/11/...Veuillez noter que "Est-il un moyen de faire OpenSSO/OpenAM parler de Base de données d'authentification et d'autorisation?" est rédigée de manière erronée. La question de détails et les réponses ne traitent que de l' autorisation aspect. OpenAM fonctionne très bien avec un MySQL de la base de données d'utilisateurs et de mots de passe (authentification), et vous pouvez l'utiliser cachés intégrés/serveur LDAP pour stocker les politiques et les autres paramètres.
Il sonne comme vous avez encore besoin d'étoffer votre modèle de sécurité, mais vous trouverez probablement que vous n'avez pas besoin de quelque chose comme OpenAM à tous, et peut tout simplement utiliser le conteneur/cadre de sécurité.
Cette liste pourrait fournir un bon point de départ:
http://en.wikipedia.org/wiki/List_of_single_sign-on_implementations
avec JOSSO et Shibboleth jaillissant à l'esprit.
OpenAM a deux magasins, un Magasin d'Utilisateur, dans lequel les utilisateurs et toutes leurs propriétés sont stockées et un Magasin de Configuration, qui contient la configuration. Il y a un Utilisateur de base de données du Magasin, qui est disponible dans OpenAM cependant, je ne l'ai jamais essayé. La DONC, la question que vous ont été pointant vers se réfère principalement à la configuration du magasin, qui, tout en LDAP seulement, est incorporé dans OpenAM (donc ne nécessite pas de gestion directe).
Personnellement, je suis un fan de Tomcat sur Glassfish, comme il est rapide et léger conteneur de Servlet, sans tous les désagréments qui va avec un conteneur J2EE.
Vous pouvez utiliser OpenAm avec Sgbdr. Je suis à l'aide de JBDC utilisateur basée sur le magasin en OpenAm
OpenAM semble avoir la possibilité de brancher dans votre propre module d'authentification.
Sans doute, vous pouvez faire votre DB appels à partir de votre extentsion de la AMLoginModule.
J'ai réussi à construire un utilisateur personnalisée référentiel pour OpenAm. Étant donné que cette question n'ont pas été actif pendant un certain temps, et parce qu'il serait trop long de décrire en détails ici comment le faire, je vais juste donner quelques conseils. Si vous avez besoin d'aide sur les détails, n'hésitez pas à me demander.
À partir de ce point, votre type de référentiel figurera parmi les autres types lorsque vous créez une banque de données pour un domaine.
Bonne chance !