Есть ли способ заставить OpenSSO / OpenAM общаться с базой данных для ее аутентификации и авторизации? - PullRequest
1 голос
/ 27 сентября 2010

Мы хотим использовать OpenSSO для наших нужд аутентификации и авторизации, но предпочли бы, чтобы он общался с базой данных вместо хранилища данных LDAP по умолчанию.Мы обнаружили, что в выпуске OpenAM 9.0 есть экспериментальное хранилище данных базы данных.

Однако, похоже, это касается только аутентификации и управления жизненным циклом пользователя.Не предусмотрено положение для хранения информации о правах в хранилище данных базы данных.Мы бы хотели сохранить всю информацию об аутентификации и авторизации в базе данных.

Я могу даже приложить некоторые усилия для настройки кода, чтобы заставить OpenAM общаться с базой данных для оценки политик и решать, что может сделать пользовательделать или не делать на конкретном ресурсе.Кстати, у нас есть требования для обеспечения безопасности нескольких видов ресурсов, а не только страниц (URL).

Я изучил код и обнаружил, что базовые классы хранилища данных, такие как com.sun.identity.entitlement.opensso.DataStore.java , com.sun.identity.entitlement.PolicyDataStore.java , com.sun.identity.entitlement.opensso.OpenSSOPolicyDataStore.java

тесно связаны с реализацией на основе LDAP.

Существуют ли какие-либо интерфейсы или абстрактные классы, которые я могу настроить, чтобы opensso мог общаться с хранилищем данных базы данных на предмет его прав и политических решений?

Я бы даже хотел потратить пару месяцев усилий наполучить эту работу, если некоторые могут предоставить любые подсказки, с помощью которых я могу начать.

Спасибо и С уважением,

Samba

Ответы [ 4 ]

4 голосов
/ 30 мая 2014

Это может помочь при проверке подлинности: http://rahul -ghose.blogspot.com / 2014/05 / openam-database-connectivity-with-mysql.html

Содержимоеblog, made Rahul Ghose

Подключение базы данных OpenAM к MySql

Эта запись приходитпосле долгого времени.Я действительно застрял с моим проектом в создании реализации единого входа.Я работал с удивительным программным обеспечением OpenAM, ранее OpenSSO, которое в настоящее время поддерживается сообществом Forgerock.

Моя настройка: я использовал Tomcat с Mysql и OpenAM 11.0.0, работающим на Centos

Итак, во-первых, установите mysql-connector-java для вашей операционной системы, и вы должны получить файл jar,Вот что я получил на своем ящике:

# 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.

Если вы пропустите вышеуказанный шаг, вы столкнетесь с ошибкой, которая выглядит следующим образом:

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)

Далее подключитесь кВаш сервер MySQL и перейдите на эту страницу в OpenAM (Контроль доступа -> Область (на ваш выбор) -> Хранилища данных -> Новые):

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

Теперь нажмите на кнопку Далее.Нам просто нужно изменить следующие поля:

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

Введите пароль и имя пользователя вашей базы данных mysql.Также измените IP-адрес, порт и имя базы данных вашей установки базы данных mysql для ссылки на таблицу, которую вы специально зарезервировали для использования OpenAM.OpenAM будет использовать 2 таблицы в этой базе данных, имена которых вам нужно указать здесь:

User Configuration
    *Database User Table Name: opensso_users

и здесь:

Group configuration
    Database Membership table name: groups

Так что для пользовательской таблицы вам нужносоздать столбцы как VARCHAR, как-то целое число не работает для меня.Имена столбцов, которые вам нужны в вашей таблице, можно найти в этой таблице здесь:

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

Я удалил все атрибуты iplanet_ * и создал пользовательскую таблицу в базе данных MySql.Затем использовал следующий сценарий sql для создания записей базы данных для конфигурации по умолчанию:

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));

Теперь добавьте своих пользователей в эту таблицу и вперед, вперед, вперед!

Примечание: Iне удалось заставить группы работать с этой конфигурацией, если у вас есть ноу-хау, пожалуйста, дайте мне знать

Читайте также:

1: https://wikis.forgerock.org/confluence/display/openidm/JDBC+Repository

2: Запись списка рассылки в конфигурации базы данных

0 голосов
/ 27 июня 2014

Хранилище конфигурации OpenAM в настоящее время ограничено каталогами LDAP, а права доступа хранятся в хранилище конфигурации, поэтому вам может оказаться довольно сложно выполнить это требование. Если вы все еще действительно хотите использовать DataBase в качестве бэкэнда, вам, вероятно, придется реорганизовать большое количество кода, и даже тогда вы можете обнаружить, что это вообще невозможно.

Конфигурация в основном извлекается / модифицируется реализациями com.sun.identity.sm.SMSObject, поэтому вам придется придумать пользовательский импл, который работает с базой данных.

0 голосов
/ 26 октября 2012

Я могу указать и аутентификацию, и авторизацию на базу данных (или любую другую поддержку хранилища), написав новый репозиторий opensso.Я сделал это, написав новый класс, который расширяет com.sun.identity.idm.IdRepo.Это довольно долго, поскольку новый класс должен перегружать множество абстрактных методов IdRepo.

Но это позволило мне создать новое хранилище данных в opensso.Чтобы избежать проблем с внутренним хранилищем данных opensso, я использовал свое новое хранилище данных в новой области.

Я основал свой код на базе данных opensso и примере кода репозитория ldap (доступен в исходных кодах opensso).

0 голосов
/ 03 ноября 2011

Исследование аналогичной проблемы. Найдены пользовательские модули аутентификации для OpenAM: https://wikis.forgerock.org/confluence/display/openam/Write+a+custom+authentication+module

...