2010-09-27 56 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。

相關問題