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

nous voulons utiliser OpenSSO pour nos besoins d'authentification et d'autorisation mais nous le préférerions parler à la base de données au lieu du datastore LDAP par défaut. Nous avons trouvé qu'il y a un datastore de base de données expérimental présent dans la version 9.0 D'OpenAM.

cependant, il semble ne concerner que l'authentification et la gestion du cycle de vie de l'utilisateur. Il n'est pas prévu de stocker les informations relatives aux droits dans la base de données datastore. Nous voulons garder la totalité informations d'authentification et d'autorisation dans la base de données.

je suis d'accord pour même mettre quelques efforts dans la personnalisation du code pour faire OpenAM parler à la base de données pour évaluer les politiques et décider de ce qu'un utilisateur peut faire ou ne peut pas faire sur une ressource particulière. Par ailleurs, nous avons des exigences pour protéger plusieurs types de ressources, pas seulement les pages(URLs).

j'ai regardé dans le code et constaté que les classes de base de datastore comme COM.soleil.identité.droit.opensso.La banque de données.java , com.soleil.identité.droit.PolicyDataStore.java , com.soleil.identité.droit.opensso.OpenSSOPolicyDataStore.java

sont tous étroitement liés à L'implémentation basée LDAP.

y a-t-il des interfaces ou des classes abstraites que je peux personnaliser pour faire parler opensso à database datastore pour ses droits et décisions politiques?

je serais même prêt à passer quelques mois d'effort pour obtenir ce travail si certains peuvent fournir des conseils à l'aide de laquelle je peux commencer.

Merci et Salutations,

Samba

1
demandé sur Saasira 2010-09-27 12:32:58

4 réponses

cela pourrait aider pour l'authentification: http://rahul-ghose.blogspot.com/2014/05/openam-database-connectivity-with-mysql.html

Le contenu du blog, faite par Rahul Ghose

OpenAM connectivité de base de données avec MySql

Ce post vient après une longue période de temps. J'ai été vraiment collé avec mon projet en créant un seul signe sur la mise en œuvre. Je travaillais avec un logiciel incroyable, OpenAM, anciennement OpenSSO, actuellement maintenu par la communauté Forgerock.

ma configuration: J'ai utilisé Tomcat avec Mysql et OpenAM 11.0.0 tournant sur Centos

Donc, tout d'abord, installer mysql-connector-java pour votre système d'exploitation et vous devriez obtenir un fichier jar. Voici ce que j'ai sur ma boîte:

# rpm -ql mysql-connector-java | grep jar
/usr/share/java/mysql-connector-java-5.1.17.jar
/usr/share/java/mysql-connector-java.jar
Now copy this to your tomcat installation directory. At "$CATALINA_HOME/lib" and restart tomcat.

Si vous sautez l'étape ci-dessus, vous obtiendrez une erreur qui ressemble à ceci:

java.lang.InstantiationException: JdbcSimpleUserDao.initialize: failed to load driver class jdbcDriver=com.mysql.jdbc.Driver exception=com.mysql.jdbc.Driver
    at com.sun.identity.idm.plugins.database.JdbcSimpleUserDao.initialize(JdbcSimpleUserDao.java:274)
    at com.sun.identity.idm.plugins.database.DatabaseRepo.initialize(DatabaseRepo.java:429)
    at com.sun.identity.idm.server.IdRepoPluginsCache.constructIdRepoPlugin(IdRepoPluginsCache.java:475)
    at com.sun.identity.idm.server.IdRepoPluginsCache.addIdRepo(IdRepoPluginsCache.java:353)
    at com.sun.identity.idm.server.IdRepoPluginsCache.removeIdRepo(IdRepoPluginsCache.java:251)
    at com.sun.identity.idm.server.IdRepoPluginsCache.organizationConfigChanged(IdRepoPluginsCache.java:646)
    at com.sun.identity.sm.ServiceConfigManagerImpl.notifyOrgConfigChange(ServiceConfigManagerImpl.java:493)
    at com.sun.identity.sm.ServiceConfigManagerImpl.objectChanged(ServiceConfigManagerImpl.java:453)
    at com.sun.identity.sm.SMSNotificationManager.sendNotifications(SMSNotificationManager.java:289)
    at com.sun.identity.sm.SMSNotificationManager$LocalChangeNotifcationTask.run(SMSNotificationManager.java:365)
    at com.iplanet.am.util.ThreadPool$WorkerThread.run(ThreadPool.java:306)

Ensuite, connectez - vous à votre serveur mysql et naviguez vers cette page en OpenAM (contrôle D'accès -> domaine (de votre choix) -> Datastores -> Nouveau):

Step 1 of 2: Select type of Data store

Name: My_Database_Repo
Type: 
   Active Directory
   Active Directory Application Mode (ADAM)
   Database Repository (Early Access)  <--- TICK THIS ONE
   Generic LDAPv3
   OpenDJ
   Sun DS with OpenAM schema
   Tivoli Directory Server

Maintenant, cliquez sur suivant. Il suffit de changer les champs suivants:

Password for Connecting to database: 
Password for Connecting to database (confirm):
JDBC driver url: jdbc:mysql://127.0.0.1:3306/test
Connect this user to database: root

entrez le mot de passe et le nom d'utilisateur de votre utilisateur de base de données mysql. Également modifier l' Adresse IP, port et nom de base de données de votre installation de base de données mysql pour renvoyer à une table que vous avez spécifiquement réservée pour OpenAM à utiliser. OpenAM utilisera 2 tables dans cette base de données, dont les noms doivent être spécifiés ici:

User Configuration
    *Database User Table Name: opensso_users

et ici:

Group configuration
    Database Membership table name: groups

donc pour la table d'utilisateur, vous devez créer les colonnes comme VARCHAR, en quelque sorte entier n'a pas fonctionné pour moi. Les noms de colonne dont vous devez avoir dans votre tableau peut être trouvé dans ce tableau ici:

List of User Attributes Names in Database

uid
ChangePassword
sunIdentityMSISDNNumber
mail
sn
manager
preferredlocale
iplanet_am_user_password_reset_force_reset
givenname
iplanet_am_user_alias_list

j'ai supprimé tous les attributs iplanet_* et créé une table d'utilisateur dans la base de données MySql. Puis utilisé le script sql suivant pour créer les entrées de base de données pour la configuration par défaut:

create database test;
use test; 
create table opensso_users (uid varchar(50), userpassword varchar(50), inetuserstatus integer, cn varchar(50),mail varchar(50),manager varchar(50), preferredlocale varchar(50), givenname varchar(50), telephonenumber varchar(50), telephonenumber varchar(50), telephonenumber varchar(50), sn varchar(50)  );
create table groups (uid varchar(50), group_name varchar(50), cn varchar(50));

ajoutez maintenant vos utilisateurs à cette table et allez, Allez, allez!

NB: Je n'ai pas pu faire travailler les groupes avec cette configuration, si vous avez un savoir-faire, s'il vous plaît faites le moi savoir

lire aussi:

1: https://wikis.forgerock.org/confluence/display/openidm/JDBC + dépôt

2: liste de Diffusion de l'entrée dans la base de données de configuration

3
répondu mirage 2015-04-21 08:38:33

Research similar issue. Trouvé des modules d'authentification personnalisés pour for OpenAM: https://wikis.forgerock.org/confluence/display/openam/Write+a + personnalisé+authentification + module

0
répondu Jacob Zwiers 2011-11-03 17:08:30

je pourrais faire en sorte que l'authentification et l'autorisation pointent vers la base de données (ou tout autre support de stockage) en écrivant un nouveau dépôt opensso. Je l'ai fait en écrivant une nouvelle classe qui étend com.soleil.identité.idm.IdRepo. C'est assez long depuis que la nouvelle classe doit surcharger beaucoup de méthodes abstraites IdRepo.

mais cela m'a permis de créer un nouveau datastore dans opensso. Pour éviter les problèmes avec opensso datastore interne, j'ai utilisé mon nouveau datastore sur un nouveau domaine.

j'ai basé mon code sur la base de données opensso et le code d'exemple de dépôt ldap (disponible dans opensso sources).

0
répondu morbac 2012-10-26 06:36:32

OpenAM configuration store est limité aux répertoires LDAP pour le moment, et les droits sont stockés dans la configuration store, donc vous pouvez trouver cette exigence assez difficile à implémenter. Si vous voulez toujours vraiment utiliser la base de données comme un backend, vous auriez probablement à remanier beaucoup de code, et même alors vous pouvez trouver que ce n'est pas faisable du tout.

la configuration est principalement récupérée / modifiée par le com.sun.identité.sm.Implémentations SMSObject, vous devrez donc trouver une implémentation personnalisée qui fonctionne avec une base de données.

0
répondu Peter Major 2014-06-27 16:41:40