Alternatives OpenSSO / OpenAM

Attention! Je suis un peu en voyage de pêche ici, et je ne suis même pas sûr que les questions que je pose aient du sens. S'il vous plaît être gentil avec vos réponses! :)

j'ai récemment repris un projet qui est actuellement basé sur Java + Linux + Tomcat + MySQL. À l'heure actuelle, le système est essentiellement un site Web avec quelques tâches cron en arrière-plan pour déplacer certaines données, etc. En travaillant avec le chef de produit pour développer un arriéré priorisé, il est clair de ce qu'il veut faire que je dois commencer à développer une architecture orientée service (SOA <-- buzz word warning!), et je vais finir avec un mélange de serveurs web et les serveurs d'applications. Note: j'envisage sérieusement de passer à Glassfish v3.

actuellement, l'authentification et les autorisations sont traitées en code Java et les informations utilisateur sont stockées dans la base de données MySQL. Au minimum, il me semble que j'ai besoin de partager ce dans un distinct service d'authentification (sinon, va se retrouver avec un tas de code dupliqué partout dans l'endroit pour traiter l'authentification de l'utilisateur et les autorisations).

j'ai cherché des solutions de connexion unique (SSO) type et j'ai fait quelques recherches. De ce que je peux comprendre, OpenSSO a été officiellement abandonné par Oracle, mais repris par ForgeRock et maintenant est appelé OpenAM. Cela semble être très proche de ce que je veux, mais puisque j'ai déjà un MySQL système, je préférerais avoir quelque chose qui le supporte (ou un autre type de RDBMS). J'ai trouvé ceci sur le débordement de la pile et il semble indiquer que C'est essentiellement LDAP ou rien.

y a-t-il un moyen de faire parler OpenSSO/OpenAM à Database pour son authentification et son autorisation?

mes questions sont:

quelles sont les autres options disponibles pour OpenSSO/OpenAM? Le LDAP est-il la voie à suivre? Remarque: la réalisation d' une recherche" OpenAM vs " sur google ne donne pas grand chose. Les gens ont tendance à "rouler leur propre"?

toutes les pensées/suggestions / liens sur ce sujet qui aideront à m'éduquer seront grandement appréciés. Merci d'avance pour votre patience et votre aide.

33
demandé sur Community 2011-10-11 23:13:15

7 réponses

intégrez-vous des applications existantes, ou voulez-vous simplement prendre en charge vos propres applications?

êtes-vous à la recherche de justificatifs d'identité réels ou simplement partagés? SSO se connecte à une seule application, et avoir ce justificatif se propage à une autre application (comme se connecter à Gmail et être automatiquement connecté à Blogger). Le justificatif d'identité partagé est vous pouvez utiliser le même nom de connexion et mot de passe à travers les applications, mais le justificatif d'identité lui-même n'est pas automatiquement propagées.

LDAP est un système commun utilisé pour gérer un justificatif d'identité partagé. De nombreux systèmes vous permettent de pointer leur mémoire d'authentification vers un serveur LDAP existant.

par exemple, si vous aviez plusieurs applications déployées dans un conteneur Java EE, et aussi, disons, un serveur de courrier électronique et un client de courrier électronique basé sur le web, toutes ces applications diverses pourraient être pointées vers le même serveur LDAP et vos utilisateurs auraient un seul login et mot de passe pour tous les les différents systèmes, tous écrits en différentes langues, tous déployés sur des machines différentes. Il s'agit d'un cas d'utilisation de pain et de beurre de LDAP, et à peu près tous les systèmes peuvent gérer cela hors de la boîte. Glassfish et Tomcat peuvent facilement être validés par un serveur LDAP. Ainsi Apache (serveur Web), Postgres (base de données), Postfix (courriel), etc. etc.

donc si vous voulez simplement un justificatif d'identité partagé, vous obtenez ce" gratuitement", dès maintenant, en installant un serveur LDAP. LDAP est un peu d'une autre bête que quelque chose comme un SGBD, mais une fois que vous l'étudiez un peu et "get it", il est vraiment très agréable. OpenLDAP est un serveur LDAP populaire, mais J'ai un faible pour ApacheDS.

la façon de configurer cela dans un conteneur Java EE est de configurer un"domaine". GF et Tomcat ont tous les deux des Royaumes LDAP hors de la boîte, j'imagine que les autres le font. Mais le problème est que vous devez utiliser la sécurité Java EE pour tirer parti du Royaume.

voir, le détail avec un Java EE Le domaine est que c'est un aspect du conteneur, pas l'application. Tout comme un pool de connexion est une ressource de conteneur que votre application exploite. La plupart des gens veulent que la sécurité fasse partie de leur application, où ils sentent qu'ils ont plus de contrôle sur elle.

tout cela est bien et bon jusqu'à ce que vous commencez à obtenir un tas d'applications différentes et tout le monde est configuré différemment et a des listes d'utilisateurs distinctes, et des politiques de mot de passe, etc. etc.

LDAP peut corriger beaucoup de cela, puisque vous les configurez tous pour utiliser le même magasin de justificatifs d'identité.

le domaine comble ce 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 domaine, alors ils tous obtiennent de partager les justificatifs d'identité dans ce domaine (quel que soit le type de domaine).

les Royaumes peuvent être n'importe quoi: basé sur des fichiers, db, LDAP, etc. Domaines aussi cluster si le conteneur clusters (qui peut être pratique).

le côté obscur de la sécurité Java EE, et pourquoi la plupart des applications l'évitent, est que, puisque, encore une fois, le domaine fait partie du conteneur, et non l'application, il peut être un peu ungainly à utiliser, et peut-être pas offrir les fonctionnalités que vous aimez en termes de gestion des utilisateurs, les politiques de mots de passe, etc.

mais le bon côté de la sécurité Java EE est qu'une fois que vous êtes sous son parapluie, vous pouvez justificatifs d'identité partout dans votre code facilement. Une personne se connecte au site web, et ce justificatif peut être utilisé dans l'application web, ou automatiquement propagé de nouveau au niveau EJB (jamais un niveau EJB distant), et l'information est toujours pratique.

vous pouvez pointer vos applications web vers un domaine, vous EJBs, vos services web. Ils ont tous l'effet de levier les mêmes morceaux.

pour obtenir sorte du meilleur des deux mondes est de tirer parti des mécanismes spécifiques de conteneur à l'accès aux conteneurs de sécurité. C'est l'autre côté sombre de la sécurité Java EE.

les choses comme les royaumes, et l'accès direct à la sécurité des conteneurs ne sont pas portables à travers les conteneurs. GF le fait différemment de Tomcat et WebLogic. Tout est très proche, mais diffère dans les détails afin que votre code ne soit pas porté de façon transparente.

le bon côté est pour les applications maison, la plupart des gens simplement tirer parti du conteneur qu'ils ont, mettre une abstraction raisonnable autour du code dépendant du conteneur, et l'appeler le jour en notant que oui, ils devront porter ce si et quand ils se déplacent à un conteneur différent. Mais, dans la pratique. tout comme une base de données, une fois qu'une plate-forme de conteneur est choisi, les gens ont tendance à se blottir dans serré et coller avec elle.

enfin, Servlet 3.0 (dans GF3 et Tomcat 7) standardise davantage les problèmes de login programmatiques pour les rendre plus mobiles à travers les conteneurs, mais les concepts sous-jacents sont les mêmes.

maintenant, SSO.

SSO est une bête différente. Mais gf et Tomcat prennent en charge 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é car il s'appuie davantage sur la sécurité du conteneur et son cycle de vie, plutôt que sur une plus grande flexibilité sous le contrôle de l'application. L'esprit, et pas seulement sur les Royaumes (c'est donné), mais sur le réel forme basée sur le conteneur login, plutôt qu'un login programmatique personnalisé. FORMULAIRE de connexion n'est pas spectaculaire, mais il est fonctionnel et il fonctionne. Implémenter un domaine, déployer vos applications sur une seule instance de Tomcat ou GF (ou un cluster dans GF 3.1), et vous obtenez SSO gratuitement, donc si c'est important, c'est plutôt sympa. Il est utilisable est très bien pour les applications de back office, mais peut-être pas l'internet public.

si vous voulez une solution SSO plus sophistiquée, alors vous devez regarder sur mesure application. OpenSSO en fait partie, et s'appuie sur SAML et le profil web SAML. Cependant, il en existe d'autres. Il y a CAS, Atlassian Cloud, Kerberos, et OAuth aussi. Ils utilisent tous des protocoles différents de SAML. Si vous voulez rester avec SAML, vous pouvez aussi regarder Shibboleth, ou même SimpleSAML (SimpleSAML est un serveur PHP qui agit comme un fournisseur D'identité SAML, entre autres, mais vous avez encore besoin d'un fournisseur de services dans vos applications).

peu importe le protocole que vous choisissez, le processus est essentiellement le même (détaillé ici -- Cross Domain Login - comment se connecter à un utilisateur automatiquement lors d'un transfert d'un domaine à un autre ).

Mais le diable est dans les détails. Et, garçon, il y a des diables.

Tous ces systèmes sont complexes. Le SSO est compliqué. Par exemple, maintenant que vous N'avez Qu'une seule affiche, qu'en est-il de L'affichage unique? Qu'en Seule Fois? Ce sujet identification des changements, tandis que les utilisateurs sont connectés? Qu'en est-il D'un STS (Secure Token Service) pour vos Services Web? (STS offre un mécanisme d'authentification délégué similaire pour les services web.)

SAML vous présente beaucoup de nouveau vocabulaire, et beaucoup de configuration. Il n'est pas facile de le relever puisque la documentation n'est pas stellaire et repose beaucoup sur des documents de normes qui parlent à un niveau plus élevé de choses génériques, et pas à vous et à votre application en particulier.

si vous n'avez pas besoin vraiment besoin de SSO, alors vous serez probablement content avec quelque chose comme un magasin LDAP central et aller de là.

tout cela dit, à titre d'exemple, nos applications prennent en charge à la fois un backend DB et LDAP. Ils utilisent du poisson de verre, et la sécurité Java EE. Nous contrôlons entièrement l'expérience utilisateur. Nous soutenons également SSO via SAML( nous avons écrit notre propre identité et fournisseurs de services), et nous avons tous les deux des justificatifs d'identité partagés via LDAP et SSO à travers Java et d'autres applications, en utilisant notre code et le code tiers. Le bon côté, c'est que tout est basé sur des normes. Le côté obscur est que les normes sont communiquées en anglais, et l'anglais est sujet à interprétation.

je dis cela simplement pour dire que cela peut être fait. J'ai aussi écrit ad hoc, back of the napkin SSO implémentations, à la fois le même domaine et le domaine croisé (le même domaine est simple avec un cookie partagé) en utilisant des filtres Servlet simples. Politiques de mot de passe, récupération de mot de passe, garder vivante 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 manquerais à mon devoir de ne pas mentionner la sécurité des ressorts et des ressorts qui offre tout cela en plus du ressort. Je ne l'ai pas utilisé (Je ne suis pas une personne de printemps), mais ces gens savent ce qu'ils font donc il est intéressant de regarder.

92
répondu Will Hartung 2017-05-23 12:34:15

s'il vous Plaît noter que " Est-il un moyen de faire OpenSSO/OpenAM parler de Base de données d'authentification et d'autorisation? est mal formulé. Les questions détaillées et les réponses ne concernent que l'aspect autorisation . OpenAM fonctionne très bien avec une base de données MySQL d'utilisateurs et de mots de passe ( authentification ), et peut utiliser son serveur LDAP caché/intégré pour stocker les politiques et autres paramètres.

It on dirait que 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 du tout, et peut juste utiliser le conteneur/cadre de sécurité fournie.

2
répondu Slacker_CA 2017-05-23 12:02:16

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.

0
répondu beny23 2011-10-11 19:27:21

OpenAM a deux magasins séparés, un magasin Utilisateur, où les utilisateurs et toutes les propriétés d'accompagnement sont stockés et un magasin de Configuration, qui détient la configuration. Il y a une base de données User Store, qui est disponible en OpenAM mais je ne l'ai jamais essayé. La question SO que vous avez pointée se référait principalement au magasin de config, qui, bien que LDAP seulement, est intégré dans OpenAM (donc ne nécessite pas de gestion directe).

personnellement je suis un fan de Tomcat sur Glassfish, car il s'agit d'un container Servlet rapide et léger, sans tout le bloat associé qui va avec un container plein J2EE.

0
répondu Sam 2011-10-12 09:16:15

vous pouvez utiliser OpenAm avec RDBMs. J'utilise le magasin utilisateur basé sur JBDC dans OpenAm

0
répondu David Levin 2011-10-29 05:22:04

OpenAM semble avoir la capacité de brancher votre propre module d'authentification .

probablement, vous pouvez faire vos appels DB à partir de votre extension de L'AMLoginModule.

0
répondu Jacob Zwiers 2011-11-03 17:21:52

j'ai réussi à créer un référentiel utilisateur personnalisé pour OpenAm. Étant donné que cette question n'a pas été active pendant un certain temps et qu'il serait trop long de décrire en détail ici comment la poser, je vais juste donner quelques conseils. Si vous avez besoin d'aide sur les détails, n'hésitez pas à me demander.

  • votre point d'entrée de base doit étendre com.soleil.identité.idm.IdRepo.
  • vous devez enregistrer votre dépôt personnalisé en utilisant ssoadm.jsp?cmd=add-sous-schéma.

à partir de ce point, votre type de dépôt sera listé parmi les autres types lorsque vous créez une mémoire de données pour un domaine.

bonne chance !

0
répondu Christian Hebert 2015-06-29 20:00:21