身份管理解决方案
【IT168 专稿】概述
IBM Tivoli Directory Integrator(以下简称TDI) 使身份数据保持同步,这些身份数据驻留在目录、数据库、协作系统、用于人力资源(HR)、客户关系管理(CRM)和企业资源规划(ERP)的应用程序以及其他公司的应用程序中。
作为公司身份结构与身份数据应用资源之间的一个灵活的同步层,IBM Tivoli Directory Integrator 消除了对集中式数据存储的需要。对于那些必须选择部署企业目录解决方案的企业,通过连接到遍及整个组织各种存储库中的身份数据,IBM Tivoli Directory Integrator 有助于简化这一过程。
利用一些内置的连接器、扩展和修改这些连接器的开放式体系结构的 JavaTM 开发环境以及在进行数据处理时将逻辑应用于数据的工具,IBM Tivoli Directory Integrator 可以帮助您:
• 同步和交换应用程序或者目录资源之间的信息。
• 管理各种存储库的数据,提供各种应用程序(包括安全和配置)所需的一致性目录基础设施。
• 创建权威数据空间,以便只将值得信任的数据公开给高级软件应用程序(比如 Web 服务)。
在企业实施集中身份管理的过程中,在通过TDI对应用系统供应帐号的过程中,如果应用程序的用户注册库保存在关系数据库中,在使用TDI来供应帐户的方法通常有几种选择:
• 直接将通过TDI配置数据库的jdbc连接器连接至应用程序用户所在的表中,通过对表的增、删、改、查来对帐户相关属进行操作。
• 通过TDI来调用应用程序开发商提供的JAVA或者C语言身份管理接口,将用户身份信息供应给应用程序。
在本例中,作者通过一个简单的例子,在TDI的使用过程中,通过调用了测试的Java方法,实现了后者的解决方案,以供大家参考。
2. 配置TDI
2.1. 创建新的TDI配置文件
下面的步骤用于创建一个TDI配置文件:
1. 启动Tivoli Directory Integrator,点击开始-程序-IBM Tivoli Directory Integrator v6.1.1-Start Config Editor。
点击按钮”新建”创建TDI配置文件
2. 修改文件名称,并保存至c:\tdi_java目录中,文件名称为tdi_java_demo.xml,默认不使用密码来保存,点击“确定”后如图所示:
2.2. 创建组装生产线
在本例中,为了简化试验步骤,仅以创建新增的组装生产线为例。
在本节中我们将创建装配线从TIM中读取数据,通过TDI调用Java方法将帐户供应到应用系统中保存用户注册信息的表中。
1. 右键单击“组装流水线”文件夹,选择新建组装流水线,输入流水线名称JavaAddOnly。
2. 在新建了组装流水线后,界面会出现一个用户输入配置信息的窗口,包括数据送入和数据流的连接器定义。右键单击“流”选择"添加函数组件"。
3.在选择连接器的界面中选择连接器类型为"ibmdi.JavaClassFC",输入名称calljava,点击“确定”后,成功创建装配线。
4.设置流calljava的属性
在数据流,配置的TAB里面,分别执行类属Java方法的三个设置项:
Jar文件/Java方法:C:\tdi_java\UserManager.class
Java类:com.ibm.UserManage
方法:boolean userAdd(java.lang.String p1, java.lang.String p2, java.lang.String p3, java.lang.String p4)
在这个的步骤中调用的class对应的java文件内容为:
package com.ibm; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; public class UserManage { private static Connection conn; public UserManage(){ } public boolean userAdd(String username,String pwd,String org,String duty){ try{ Class.forName("com.ibm.db2.jcc.DB2Driver"); conn = DriverManager.getConnection("jdbc:db2://192.168.64.148:50000/ITIMDB", "db2admin","db2admin"); PreparedStatement ps = conn.prepareStatement("insert into DB2ADMIN.USERDATA_RESULT(username,pwd,org,duty) values(?,?,?,?)"); ps.setString(1,username); ps.setString(2,pwd); ps.setString(3,org); ps.setString(4,duty); ps.execute(); System.out.println("username is : " +username); conn.close(); return true; }catch(Exception ex){ ex.printStackTrace(); } return false; }
在本例中,通过userAdd方法来实现将用户信息写入到ITIMDB中的用户表USERDATA_RESULT,通过使用java命令或者使用java开发工具,如Eclipse等工具编译成class文件。
5.配置输出映射属性:

1. 新建事件处理程序
通过点击“事件处理程序”的右键菜单“新建事件处理程序”来创建事件处理程序。
2.在类型选择中,选择ibmdl.DSMLv2EventHandler,并输入事件处理程序的名称为Tdi_Event

3.设置事件吹程序的DSML v2事件处理程序的属性
HTTP端口:8080
认证域:IBM Tivoli Directory Integator
命名上下文:dc=Tdi_Java
用户搜索的组装生产线:JavaLookup
用于添加的组装生产线:JavaAddOnly(本例中仅提供此方法调用)
要修改的组装生产线:JavaIertator
用户删除的组装生产线:JavaDelete
4.启动事件处理程序Tdi_Event,用户与TIM整合的调用
通过右键单击”Tdi_Event”点击菜单“运行”,事件监听程序启动在8080端口,如下图所示:

3. 定义和配置ITIM数据模型
在本例中需要在文件夹testdsmlProfile中创建以下三个文件
• Schema.dsml 为帐户和服务类定义dsml文件。
• Resource.def 包含用于创佳testdsmlProfile服务配置文件的资源定义资源定义。
• CustomLabels.properties 定义在表单上显示给用户属性输入的字段标签。
Schema.dsml文件包含定义帐户和服务的LDAP属性和对象类,属性描述见表1
表 1 数据类型定义
与服务相关的属性如表2所示,在表2中给定了属性定义的标签。
表 2 服务属性定义
帐户相关属性定义如表3所示:
表 3 帐户属性定义
服务和帐户的定义在资源文件中定义:resource.def,这个文件中也包括了在调用请求过程中需要使用的协议和一系列服务属性。
这些文件通过下面的步骤装载到TIM中(步骤中以Windows2003为例,Unix系统中参考修改)
1. 把目录testdsmlProfile和内容复制到下面的文件夹{ITIM_HOME}\data\remote_resources.
2. 启动Dos运行界面,并将路径指向{$ITIM_HOME}\bin\win.
3. 执行命令config_remote_services -profile testdsmlProfile.
4. 重新启动ITIM server.
4. 配置ITIM
4.1. 添加testdsmlProfile类型的Service
1.创建服务,选择服务类型为testdsmlProfile
3. 输入相关的属性:
在此之前请启动TDI中定义的事件处理程序Tdi_Event
Service Name:testdsmljava
Naming Context:dc=Tdi_Java(与TDI中配置的事件处理程序Tdi_Evnet中的上下文一致)
URL:http://localhost:8800(与TDI中配置的事件处理程序Tdi_Evnet中的事件监听端口一致)
Password:agent
User Id:agent
4. 验证系统配置是否成功。
在输入属性完成后,点击Test按钮,验证系统配置是否正确。
1.新建供应策略,命名为testdsmlPolicy
2.添加角色
添加预先定义好的角色test_role,将此供应策略映射到角色test_role

3.设置Entilements
输入一下字段属性:
Type: Automatic
Target Type:Servoice
Service Type: testdsmlProfile
Service Name: testdsmljava
4.点击Provisioning Parameter List输入供应字段详细的属性值设置:

5.提交当前页面保存,并提交上一级页面,系统提示;
6.确定后,系统提示,是否保存设置,直接确定退出。
7.选择策略生效时间,默认当前值后,点击“提交”,完成供应策略的创建。
5. 示例运行结果
1.新增一个用户身份zhangsan
2.输入Last Name和Full Name,以及选择组织机构角色test_role
3.选择提交时间为立即执行
4.查看zhangsan用户的帐号创建情况
选择管理帐户的界面,浏览所有系统帐户,选择用户zhangsan
5.点击查看zhangsan对应的Managed Accounts
6.显示帐户zhangsan通过服务testdsmljava创建
7.从TDI的事件处理程序中可以看到帐户创建的执行结果
8.从数据库的表db2admin.userdata_result中可以看到当前新增的zhangsan的帐号被成功供应到改表中。执行sql语句查询表userresult:select * from db2admin.userdata_result
参考资料
1.IBM Tivoli Directory Integrator 6.1.1: Administrator Guide
2.Identity Management Design Guide with IBM Tivoli Identity Manager(redbooks: SG24-6996-01)
3. Integrated Identity Management using IBM Tivoli Security Solutions(redbooks:SG24-6054-00)
4. Robust Data Synchronization with IBM Tivoli Directory Integrator(redbooks:SG24-6164-00)