Есть ли способ заставить OpenSSO/OpenAM общаться с базой данных для ее аутентификации и авторизации?
Мы хотим использовать 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 общаться с хранилищем данных базы данных на предмет его прав и политических решений?
Я бы даже хотел потратить пару месяцев на то, чтобы получить эту работу, если кто-то может дать какие-то подсказки, с помощью которых я могу начать.
Спасибо и С уважением,
самба
4 ответа
Это может помочь для аутентификации: http://rahul-ghose.blogspot.com/2014/05/openam-database-connectivity-with-mysql.html
Содержание блога, сделанное Рахулом Гозе
Подключение базы данных 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));
Теперь добавьте своих пользователей в эту таблицу и иди, иди, иди!
NB: я не мог заставить группы работать с этой конфигурацией, если у вас есть ноу-хау, пожалуйста, дайте мне знать
Читайте также:
1: https://wikis.forgerock.org/confluence/display/openidm/JDBC+Repository
2: запись списка рассылки в конфигурации базы данных
Хранилище конфигурации OpenAM в настоящее время ограничено каталогами LDAP, а права доступа хранятся в хранилище конфигурации, поэтому может оказаться, что это требование довольно сложно реализовать. Если вы все еще действительно хотите использовать DataBase в качестве бэкэнда, вам, вероятно, придется реорганизовать большое количество кода, и даже тогда вы можете обнаружить, что это вообще невозможно.
Конфигурация в основном извлекается / модифицируется реализациями com.sun.identity.sm.SMSObject, поэтому вам придется придумать пользовательский импл, который работает с базой данных.
Я мог бы указать и аутентификацию, и авторизацию на базу данных (или любую другую поддержку хранилища), написав новый репозиторий opensso. Я сделал это, написав новый класс, который расширяет com.sun.identity.idm.IdRepo. Это довольно долго, поскольку новый класс должен перегружать множество абстрактных методов IdRepo.
Но это позволило мне создать новое хранилище данных в opensso. Чтобы избежать проблем с внутренним хранилищем данных opensso, я использовал свое новое хранилище данных в новой области.
Я основал свой код на базе данных opensso и примере кода репозитория ldap (доступен в источниках opensso).
Исследование аналогичного вопроса. Найденные пользовательские модули аутентификации для OpenAM: https://wikis.forgerock.org/confluence/display/openam/Write+a+custom+authentication+module