2010-09-27 60 views
1

我们希望将OpenSSO用于我们的身份验证和授权需求,但希望它与数据库而不是默认的LDAP数据存储库进行对话 。我们发现OpenAM 9.0版本中有一个实验数据库数据存储。有没有办法让OpenSSO/OpenAM与数据库进行对话以进行身份​​验证和授权?

但是,它似乎只关心认证和用户生命周期管理。没有规定将权利信息存储在数据库数据存储中。我们希望将整个认证和授权信息保存在数据库中。

我甚至可以在自定义代码的过程中做一些努力,使OpenAM与数据库对话以评估策略并决定用户可以在特定资源上执行或无法执行的操作。顺便说一下,我们有安全防护几种资源的要求,而不仅仅是页面(URL)。

我已经调查了代码,发现基本数据存储类,如com.sun.identity.entitlement.opensso.DataStore.javacom.sun.identity.entitlement.PolicyDataStore.javacom.sun.identity.entitlement.opensso.OpenSSOPolicyDataStore.java

都是紧密结合的基于LDAP的实现。

是否有任何接口或抽象类,我可以自定义以使opensso与数据库数据存储进行权限和策略决策?

我甚至愿意花费几个月的努力来完成这项工作,如果有些人可以提供我可以开始使用的任何提示。

感谢和问候,

桑巴

回答

0

通过编写新的opensso存储库,我可以将身份验证和授权指向数据库(或任何其他存储支持)。我通过编写一个扩展com.sun.identity.idm.IdRepo的新类来实现。这很长,因为新类必须重载很多IdRepo抽象方法。

但这让我在opensso中创建一个新的数据存储。为了避免opensso内部数据存储问题,我在新的领域使用了我的新数据存储。

我基于opensso数据库和ldap存储库示例代码(可在opensso源代码中使用)获取我的代码。

3

这可能有助于进行身份验证:http://rahul-ghose.blogspot.com/2014/05/openam-database-connectivity-with-mysql.html

博客的内容,取得由Rahul Ghose

OpenAM数据库连接与MySQL

这个职位而来的,是很长一段时间后, 。我一直坚持使用我的项目创建Single Sign On实现。我正在开发一款非常棒的软件,OpenAM,以前的OpenSSO,目前由Forgerock社区维护。

我的设置:我使用的Tomcat与MySQL和OpenAM 11.0.0在CentOS

运行第一

所以第一件事情,安装mysql-连接器的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数据库用户的密码和用户名。还要更改mysql数据库安装的IP地址,端口和数据库名称,以引用专门为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)); 

现在你的用户添加到该表走,走,走!

注:我不能让这个配置的工作组,如果您有任何诀窍,请让我知道

阅读也:

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

2:数据库配置上的邮件列表条目

0

OpenAM配置存储目前仅限于LDAP目录,并且权利存储在配置存储中,因此哟你可能会觉得这个要求很难实现。如果你还在真的想要使用数据库作为后端,你将不得不重构很多代码,即使这样你可能会发现它根本不可行。

配置主要由com.sun.identity.sm.SMSObject实现检索/修改,因此您必须想出一个可以与数据库一起使用的自定义impl。

相关问题