理解 IBM InfoSphere MDM Server 安全性,第 3 部分: 使用 LDAP 实现事务授权

IBM® InfoSphere™ Master Data Management Server 允许添加自己的事务授权 provider 类。在本文中,了解默认的事务授权 provider 类,并探索一个展示如何使用 LDAP 服务器实现事务授权 provider 类的例子。这个 系列 的其他文章详细描述了如何使用和配置不同的 MDM Server 安全组件来解决现实中的业务问题。

Alan Li, 应用程序架构师, WSO2 Inc

Alan LiAlan Li 是 InfoSphere MDM Server 开发小组的应用程序架构师。他主要从事 Party Domain 和 Account Domain 方面的工作。



2009 年 1 月 22 日

简介

InfoSphere MDM Server 安全模块的特点之一是基于用户或用户所属的组提供事务授权。这种授权决定是否允许请求用户使用一个事务。这被称作 InfoSphere MDM Server 安全模块的事务授权。默认情况下,事务授权是禁用的。

为了使用事务授权,可以将 InfoSphere MDM Server 配置为使用一个事务授权 provider 类。这个 provider 类与管理事务授权的系统进行交互。

图 1. 事务授权
InfoSphere MDM Server 事务授权

事务授权 provider 类必须实现 com.dwl.base.security.AuthorizationProvider 接口。InfoSphere MDM Server 开箱即用地提供了一个作为 InfoSphere MDM Server Security Manager 接口的事务授权 provider 类,以及一个作为 Lightweight Directory Access Protocol(LDAP)服务器接口的事务授权 provider 类。您还可以实现自己的 provider 类。

图 2. 事务授权实现选项
InfoSphere MDM Server 事务授权实现选项

本文将详细描述如何配置 LdapTransactionAuthorizationProvider 类,以及如何在 InfoSphere MDM Server 上启用事务授权。这个 provider 类使用 LDAP 服务器来管理事务授权。本文的示例 provider 类使用一个简单的目录结构来管理用户、组和事务授权。

前提

本文使用 Tivoli Directory Server version 6.1 作为 LDAP 服务器。本文假设您拥有 LDAP 方面的基础知识,并拥有使用 Tivoli Directory Server 的经验。

本文包含提交到 InfoSphere MDM Server version 8.0 的事务。您应该知道如何:

  • 将事务提交到 InfoSphere MDM Server
  • 使用 Configuration and Management 组件配置 InfoSphere MDM Server

在 InfoSphere MDM Server 事务中指定用户和组

对于任何 InfoSphere MDM Server 事务,都可以在事务的 DWLControl 对象中指定用户或用户所属的组。假设成功认证用户或组,事务授权将检查用户或组是否被授权访问请求的事务。

清单 1 是 DWLControl 对象的 XML 表示的一个例子:

清单 1. DWControl 对象的 XML 表示
<DWLControl>
  <requesterName>myUserName</requesterName>
  <userRole>myGroup1</userRole>
  <userRole>myGroup2</userRole>
</DWLControl>

<requesterName> 元素对应于用户,<userRole> 元素对应于用户所属的组。对于每个事务,DWLControl 对象必须包含一个用户名,另外还可以包含 0 个或多个组名。事务授权 provider 通过 com.dwl.base.security.AuthorizationProvider 接口检查用户名和组名,以确保对事务的访问经过授权。


LDAP 事务授权 provider

通常,可以选择使用 LDAP 事务授权 provider,因为:

  • 您的组织已经有 LDAP 服务器基础设施。
  • LDAP 服务器上已经设置了您的组织的用户和组。在这种情况下,只需添加想要与用户和组相关联的 InfoSphere MDM Server 事务。

com.dwl.base.security.provider.LdapTransactionAuthorizationProvider 类就是使用 LDAP 服务器实现事务授权的一种实现。它使用一个简单的目录结构来管理用户、组和事务名称之间的关系。当然,您也可以实现自己的 LDAP 事务授权 provider 类,只要这个类实现 com.dwl.base.security.AuthorizationProvider 接口就行了。


使用来自 InfoSphere MDM Server 的 LDAP 事务授权 provider

InfoSphere MDM Server 提供了一个 LdapTransactionAuthorizationProvider 类,您可以在 LDAP 服务器上使用这个类。使用这个类的步骤如下所示:

  • 设计授权需求
  • 在 LDAP 服务器上实现授权需求
  • 配置 LdapTransactionAuthorizationProvider 类,使之成为 LDAP 服务器的接口

下面的小节更详细地描述这些步骤。

设计授权需求

授权需求应该以业务需求为基础。为了演示如何使用 LdapTransactionAuthorizationProvider 类,现在假设您的 NewBusiness 部门有 3 个组:DirectSales、CSRs 和 DataStewards。NewBusiness 部门决定授予这 3 个部门访问以下事务的权限。

事务
addPersonDirectSales、CSRs、DataStewards
getPersonCSRs、DataStewards
updatePersonDataStewards

属于这 3 个组当中任何一个组的用户都可以使用 addPerson 事务添加一个客户。考虑到客户的隐私,只有属于 CSRs 或 DataStewards 组的用户可以使用 getPerson 事务查看客户信息。考虑到数据的完整性,只有属于 DataStewards 组的用户可以使用 updatePerson 事务更新客户信息。

假设在 NewBusiness 部门中,Fred 是 DirectSales 组的用户,Sue 是 CSRs 组的用户,而 Thomas 是 DataStewards 组的用户。

根据上述业务需要,可以设置 LDAP 服务器,使之管理以下业务授权数据:

表 1. 用户/组的事务授权
 addPersongetPersonupdatePerson
DirectSales (Fred)允许不允许不允许
CSRs (Sue)允许允许不允许
DataStewards (Thomas)允许允许允许

本文提供了一个 MDM_LADP.ldif 文件,其中显示了如何在 LDAP 服务器上设置这些用户、组和事务。您可以查看该文件,了解更多的细节(参见 下载)。

配置 Tivoli Directory Server

根据 MDM_LADP.ldif 文件,假设目录从 NewBusiness 部门开始。您需要在 Tivoli Directory Server 实例中创建以下后缀。如果使用 Tivoli Directory Server Instance Administration Tool,可以像下面这样创建后缀 o=NewBusiness,c=us

图 3. 添加 o=NewBusiness,c=us 后缀
添加后缀

为事务授权创建目录结构

创建后缀之后,可以在 Tivoli Directory Server 实例上创建 表 1 所述的目录结构。

如果使用 Tivoli Directory Server Administration Tool,那么可以通过导入 MDM_LADP.ldif 文件来创建目录结构(参见 下载)。

图 4. 导入 LDIF 文件
导入 LDIF 文件

添加后缀和导入数据之后,启动 Tivoli Directory Server 实例。如果想验证数据是否被成功地导入,还可以启动 Tivoli Directory Server Web Admin。应该可以看到,在 o=NewBusiness,c=us 后缀下有 3 个条目。要了解如何启动实例和 Web Admin,请参阅 Tivoli Directory Server 文档。

图 5. 目录条目
目录条目

配置 LDAP 事务授权 provider 类

在 Tivoli Directory Server 实例上装载好数据后,便可以配置 InfoSphere MDM Server LdapTransactionAuthorizationProvider 类。这可以通过配置 InfoSphere MDM Server Configuration and Management 设置完成。这些设置包括:

  • /IBM/DWLCommonServices/Security/enabled

    该设置决定是否为事务授权启用安全性。

    将该设置设为 true

  • /IBM/DWLCommonServices/Security/transaction_authorization_provider_class_name_1

    该设置指定事务授权 provider 类。

    将该设置设为 com.dwl.base.security.provider.LdapTransactionAuthorizationProvider

  • /IBM/DWLCommonServices/LdapSecurityProvider/LdapSearch/jndiFactoryClass

    该设置指定用于在 LDAP 服务器上进行查找的 JNDI factory 类。

    可以使用默认的设置 com.sun.jndi.ldap.LdapCtxFactory

  • /IBM/DWLCommonServices/LdapSecurityProvider/LdapSearch/jndiProviderUrl

    该设置指定指向 LDAP 服务器的 URL。

    假设在本机的端口 389 上配置 Tivoli Directory Server 实例,那么将该设置设为 ldap://localhost:389

  • /IBM/DWLCommonServices/LdapSecurityProvider/LdapSearch/base

    该设置指定从其中开始搜索的基本对象。

    图 3 中,我们从 o=NewBusiness,c=us suffix 开始设置用户和组。因此,将该设置设为 o=NewBusiness,c=us

  • /IBM/DWLCommonServices/LdapSecurityProvider/LdapSearch/Filter/user

    该设置指定应用于 LDAP 服务器的搜索过滤器,用于搜索用户被授权访问的事务。LdapTransactionAuthorizationProvider 类在运行时具体化 3 个标记,以替换实际的值。这 3 个标记是:

    %t,替换事务名

    %u,替换用户名

    %g,替换组名

    因此,根据 表 1 中实现的目录结构,将该设置设为 (&(objectClass=groupOfNames)(cn=%t)(member=uid=%u,*))

    在运行时,如果用户 Fred 请求 addPerson 事务,则构造一个搜索字符串 (&(objectClass=groupOfNames)(cn=addPerson)(member=uid=Fred,*)),以便对 LDAP 服务器进行搜索。

  • /IBM/DWLCommonServices/LdapSecurityProvider/LdapSearch/Filter/group

    该设置指定应用于 LDAP 服务器的搜索过滤器,用于搜索组被授权访问的事务。同样,LdapTransactionAuthorizationProvider 类具体化 3 个标记 %t%u%g

    因此,根据 表 1 中实现的目录结构,将该设置设为 (&(objectClass=groupOfNames)(cn=%t)(member=cn=%g,*))

    在运行时,如果组 CSRs 请求 addPerson 事务,则构造一个查询字符串 (&(objectClass=groupOfNames)(cn=addPerson)(member=cn=CSRs,*)),以便对 LDAP 服务器进行搜索。

当配置了这些设置时,InfoSphere MDM Server 分别从事务的 DWLControl 对象中的 <requesterName><userRole> 值获取用户和组信息,以确定是否授权某个用户使用该事务。如果用户没有被授权,则在响应中返回以下错误消息:

清单 2. 对未被授权的用户返回的消息
<TxResult>
  <ResultCode>FATAL</ResultCode>
  <DWLError>
    <ComponentType>108</ComponentType>
    <ErrorMessage>Security violation occurred.</ErrorMessage>
    <ErrorType>DIERR</ErrorType>
    <LanguageCode>100</LanguageCode>
    <ReasonCode>4934</ReasonCode>
    <Severity>0</Severity>
  </DWLError>
</TxResult>

本文附带的 RequestResponseSamples.zip 文件包含请求和响应样例作为测试数据(参见 下载) 。


创建自己的事务授权 provider

您可以创建自己的事务授权 provider。为此,需要创建一个实现 com.dwl.base.security.AuthorizationProvider 接口的类。该接口包括以下方法:

public boolean authorize(AuthenticationData authData, String resourceName)
                         throws SecurityProviderException;

AuthenticationData 参数是在将事务提交给 InfoSphere MDM Server 时从 DWLControl 对象创建的。AuthenticationData 参数包含来自 DWLControl 对象的用户和组信息。String 参数是资源名,您可以决定是否授权用户使用它。在这里,它就是事务名。因此,在您的 provider 类中,需要使用这 2 个参数来确定是否允许使用授权。如果授权被许可,该方法则返回 true

创建类之后,可以在 InfoSphere MDM Server 上通过设置以下 Configuration and Management 设置对它进行配置:

  • /IBM/DWLCommonServices/Security/enabled

    将该设置设为 true

  • /IBM/DWLCommonServices/Security/transaction_authorization_provider_class_name_1

    将该设置设为 provider 类的类名。


结束语

本文展示了在 InfoSphere MDM Server 上实现事务授权的一些选项。此外,还演示了设置 InfoSphere MDM Server 提供的 LdapTransactionAuthorizationProvider 类的一些步骤。InfoSphere MDM Server 提供一个接口,使您可以灵活地实现自己的事务授权 provider 类。


下载

描述名字大小
用户/组/事务的样例 LDAP 导入文件MDM_LDAP.zip1KB
样例事务请求和响应RequestResponseSamples.zip16KB

参考资料

学习

获得产品和技术

  • 用可直接从 developerWorks 下载的 IBM 试用软件 构建您的下一个开发项目。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Information Management
ArticleID=366042
ArticleTitle=理解 IBM InfoSphere MDM Server 安全性,第 3 部分: 使用 LDAP 实现事务授权
publish-date=01222009