扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
我们的例子公司环境
假设一个企业拥有 10,000 名员工,位于不同的城市。公司 LDAP 目录是 Microsoft Active Directory 2000 (MSAD)。此目录包含每个用户的记录,其他公司应用程序经常使用该目录。大约还有一半用户使用 Lotus Notes,多年来一直使用 Lotus Notes 邮件(通过 Lotus Notes 客户机以及使用 Domino Web Access 通过浏览器)、Lotus Team Workplace (QuickPlace)、Lotus Instant Messaging (Sametime) 和其他 Domino 应用程序。
IT 部门最近部署了 Lotus Workplace 的 2.0 版本,使用 MSAD 进行验证。这已经提示 Notes 用户请求可以从 Lotus Workplace 内访问 Domino 信息和应用程序。为此,IT 部门已经设计了新的页面,这些页面使用 Lotus Collaborative Components Portlets 和 Collaboration Center Portlets 来允许访问 Domino 服务器。
Lotus Workplace 基于 WebSphere 构建,因此可以使用 LTPA 令牌进行验证。Lotus Domino 也可以这样,但我们虚构的公司中的用户发现系统仍旧要求他们通过 Domino 服务器验证(或者更糟的是,未授予对 Notes 邮件文件的访问权)。如果默认访问的 ACL 设为 Reader 或更高,则授予了对其他 Notes/Domino 应用程序的访问权。这说明正确配置了 SSO,但是仍缺少 MSAD 记录和 Domino Directory 中的 Person 文档之间的链接。
|
确定使用的凭证
要确认连接 Lotus Domino 使用的凭证,IT 部门可以在 Domino 服务器上创建新的数据库(例如,debugger.nsf),该数据库由具有两个计算文本条目的页面组成。一个条目具有 @UserName 的值,用于显示凭证。另一个条目具有 @Text(@Now) 的值。(这说明了 @Now 随时在变化。)这样可以防止浏览器对该页面进行缓存,当测试实时更改时,这会非常有用。当使用浏览器打开数据库时,不要忘记设置 Database Launch 选项来打开该页面。结果类似如下所示:
You are logged is as: CN=BExternal User1/OU=Burlington/OU=Lotus Engineering/ OU=Solution Test/DC=westford/DC=notesdev/DC=ibm/DC=com The timestamp from the server is 07/08/2004 03:55:52 PM |
Lotus Domino 显示的用户名是 LTPA SSO 令牌中发送的 MSAD LDAP DN:
CN=BExternal User1,OU=Burlington,OU=Lotus Engineering, OU=Solution Test,DC=westford,DC=notesdev,DC=ibm,DC=com |
Domino 用户名格式使用斜线,而不是逗号。
|
手工更新 Person 文档
LDAP DN 的 Domino 表示法不添加到每个数据库的 ACL 中和 Domino Directory 中的组中,将该 DN 添加到 Person 文档中要容易得多。例如,如果 MSAD 中的用户 BExternal User1 在 Domino 中指定为 BNotes User1,您可以修改 Person 文档,将行 CN=BExternal User1/OU=Burlington/OU=Lotus Engineering/OU=Solution Test/DC=westford/DC=notesdev/DC=ibm/DC=com 添加到 User name 字段中:
图 1. Person 文档的 User name 字段
用户 BExternal User1 登录到 Lotus Workplace 中访问 Domino 数据库时,Lotus Domino 会对他进行验证,就像他正在使用自己的 Notes ID,从而允许对不同数据的透明访问。不过,使用对目录的定制查询且不使用 DN 来标识用户的应用程序可能仍不能使用。一个例子就是 Domino Web Access (iNotes) portlet。
要确认这些应用程序使用的属性,可以通过发出命令集配置 ldapdebug=7 在 Domino 服务器控制台上启用 LDAP 调试。如果是 Domino Web Access portlet,将不对目录进行查询以获取 DN,而是使用 sAMAccountName 属性(等同于 MSAD User Properties 对话框中的 User logon name)来查询 Lotus Domino:
图 2. 显示查询凭证的 User Properties
通过将 sAMAccountName(本例中为 Beuser1)添加到 Person 文档中的 User name 字段中(图 1 中以红色显示的文本),使 Domino Web Access portlet 可以正确查找用户的邮件文件和使用 Lotus Domino 进行验证。
|
使用 Tivoli Directory Integrator 更新多个 Person 文档
手工更新一个文档可以很快地验证解决方案是否可用,但是更新数千的文档则是另一回事。为此,我们虚构的 IT 管理人员需要一种工具,这种工具可以使用 MSAD 中的信息自动更新 Lotus Domino 中的 Person 文档,而无需手工输入数据(以避免输入错误和可能导致调用帮助桌面的错误)。该过程应该不需要进行编程,但功能仍旧非常强大,可以随着公司未来的需要而发展。
IBM Tivoli Directory Integrator 非常适合进行此项任务。它使管理员可以使用 LDAP 远程连接到 MSAD,使用过滤条件选择记录,提取数据,以及仅使用几行代码来更新 Domino Directory 中的相应 Person 文档。
第一步是提供主机名称、要使用的凭证、Search Base 和用于选择目录的 Search Filter 标准,从而使用 LDAP 将 TDI 连接器配置到 MSAD:
图 3. TDI LDAP 连接器
TDI 自动发现 LDAP 模式,其允许管理员选择需要的属性($dn、cn、mail、sAMAccountName)。要创建的第一个属性是 Domino 格式的 MSAD DN。此操作就是用“/”替代“,”。默认情况下,TDI 使用 JavaScript(但也可以使用 VBscript、Perl 或希望使用的其他语言)。因此,可以容易地找到和重新使用 Internet 以及其他资源(例如大量的 TDI 文档)上可以用来完成任务的现有功能。图 4 显示了新属性 dnForDomino 的代码:
图 4. dnForDomino 属性的代码
属性 DominoTarget 的代码用于从 MSAD 中的名称(BExternal User1)构建表示 Lotus Domino 中的用户名的字符串(BNotes User1):
gn = conn.getString("givenName"); sn = conn.getString("sn"); x = new String(gn); x = x.replace("External", "Notes"); ret.value = x + " " + sn; |
提供惟一匹配的任何属性都适用(如员工编号或电子邮件地址),只要其在两个目录中都可用即可。
与 MSAD 连接器类似,使用参数设置 Domino LDAP 连接器,从而通过 LDAP 连接到 Domino 服务器:
图 5. Domino LDAP 连接器
Domino LDAP 连接器使用 Link Criteria 生成从当前 MSAD 记录到 Lotus Domino 中要更新的记录的链接:
图 6. 链接条件
Output Map 定义要对 Person 文档执行的更新活动。这包括将 dnForDomino 和 sAMAccountName 属性从 MSAD 中添加到 Lotus Domino 中的 cn 属性中:
图 7. Output Map 设置
在运行活动更新 Domino Directory 前,可以将所有记录都写入文本文件中。文本文件可以帮助验证代码是否满足要求。
或者,可以修改 LDAP 搜索过滤条件并在继续整个批处理之前仅将更改应用于其中一小部分记录:
图 8. LDAP 搜索结果
|
结束语
正如您可以看到的,Tivoli Directory Integrator 允许 IT 部门简单地以程序的方式同步 LDAP 目录。不过,我们在本文中讲述的实际上仅是 Tivoli Directory Integrator 功能的一个相当简单的例子。除了更新目录,Tivoli Directory Integrator 还有许多功能,它可以保持目录同步,移植数据,生成 HTML、XML、CSV,等等。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者