ibm tivoli_集成Tivoli Federated Identity Manager和Tivoli Identity Manager

ibm tivoli

Tivoli Federated Identity Manager(TFIM)提供了支持在SOA中传播身份的基础结构。 TFIM安全令牌服务(STS)是实现WS-Trust规范的身份和认证服务。 IBM红皮书“ 使用IBM Tivoli Federated Identity Manager在SOA传播身份 ”介绍了在SOA环境中使用TFIM。 在服务组件之间传播身份时,有三个关键要求:

身份必须以哪种格式提供给服务组件?

SOA平台和应用程序在支持的令牌类型方面具有不同的功能。 某些系统只能本地支持少量安全令牌类型。 其他人可能正在更灵活的基础架构上运行,该基础架构可以理解各种格式的安全令牌。 TFIM SOA身份基础结构支持多种令牌格式的验证和发布,包括安全性声明标记语言(SAML),Kerberos,X.509,轻量级第三方身份验证(LTPA)和用户名。

应在安全令牌中传播哪个身份?

对于由松散耦合的服务组件组成的应用程序,对于给定用户,用户存储库可能不使用相同的唯一标识符(即,用户ID和用户名)是很常见的。 不同的用户存储库可以使用不同的命名约定来构造用户标识符,或者在某些情况下,所需的身份可能不是用户唯一的,而是特定于他们在组织中的角色。 TFIM通过提供许多可以执行身份映射的STS模块来满足此要求。 这些模块提供使用以下功能查找数据的功能:

  • 轻型目录访问协议(LDAP)
  • Tivoli Access Manager(TAM)全局登录(GSO)凭证存储
  • Tivoli Directory Integrator(TDI)

通过使用可扩展样式表语言(XSL),也可以在TFIM中实现简单的映射。

身份的哪些属性应包含在安全令牌中?

传播的不仅仅是用户名或其他唯一标识符,还可以为服务组件的安全基础结构提供更多信息。 这些附加属性可以用作服务组件内的授权决策或其他操作的一部分。 安全令牌格式(例如SAML和LTPA)能够在安全令牌中包含任意属性。 其他安全令牌格式(例如用户名)则不能。 通过在STS的信任模块链中使用适当的安全令牌和身份映射模块,可以在TFIM中实现在安全令牌中包含任意属性。

在部署了Tivoli Identity Management软件组合的环境中,通常会观察到使用Tivoli Identity Manager(TIM)来管理多个用户和系统之间的帐户生命周期。 本文介绍了在使用TFIM设计和实现SOA身份解决方案时如何利用现有的TIM部署。 图1显示了本文介绍的解决方案的可能用法。

图1.将TIM与TFIM STS集成
将TIM与TFIM STS集成

在上图中,服务请求由企业服务总线(ESB)进行调解。 ESB已配置为使用现有的WS-Trust集成点调用TFIM以执行身份中介。 STS中的信任模块链将首先使用该安全令牌类型的信任模块实例来验证传入消息中的安全令牌。 接下来,TIM映射模块实例将使用TIM中的元数据将传入的身份数据映射到其他身份。 使用针对返回的安全令牌类型的信任模块实例,将所得的身份数据重新构建为其他安全令牌。

关于Tivoli Identity Manager

Tivoli Identity Manager是一个用户供应解决方案,可以管理各种平台上的用户帐户。 有关TIM的详细信息,请参阅本文结尾的“资源”部分中的信息中心。 TIM目录(LDAP目录)存储有关用户及其帐户的元数据。 图2显示了部分TIM数据模型。

图2. TIM数据模型(部分)
部分TIM数据模型

本文的相关数据关系如下:

  • 代表可以在一个或多个受管系统上拥有帐户的人员或系统实体。
  • 服务代表由TIM管理的系统。
  • 每个服务将包含零个或多个帐户 。 帐户数据可以包含用户标识符和许多其他属性。 帐户的架构由该帐户所属的服务类型确定。
  • 一个拥有零个或多个帐户。 一个人可以为每个服务拥有多个帐户,并且可以跨多个服务拥有帐户,如图3所示。
图3. TIM帐户所有权模型
帐户所有权模型

TIM目录保留TIM管理的所有系统上所有帐户的帐户数据副本。 在TIM中将其用于审计,报告和帐户重新验证之类的目的。 将这些数据的副本保留在TIM中的优点是可以执行这些操作而不会直接影响受管系统本身。

解决方案设计

图4显示了一种解决方案的高层架构,该解决方案使用TIM作为SOA身份解决方案中身份映射信息的存储库。 使用TIM Java™API为TFIM开发了TIM映射模块。

图4. TIM映射模块的体系结构
映射模块概述

STS模块接口

TFIM模块实现com.tivoli.am.fim.trustserver.sts.STSModule接口。 使用此接口的关键方面是:

  1. 创建一个OSGi扩展点,以定义模块的功能和用户界面方面。
  2. 开发一个实现STSModule接口的类。 这是实现模块的业务逻辑的地方。
  3. 创建一个java.util.ListResourceBundle ,其中包含模块的用户界面组件的标签。

该模块的要求是转换身份,因此地图模块将是此模块支持的唯一模式。

表1描述了配置TIM映射模块实例时TFIM管理员可用的配置属性。 注意,此处指定了连接到TIM环境所需的参数。 当多个信任模块链需要与同一TIM服务器进行交互时(尽管用于不同的身份转换),这可以简化配置。

表1.模块实例配置属性
配置属性 描述 样本值
模块实例名称 模块实例的名称。 这是构建信任模块链时显示在模块实例列表中的标签。 TIM映射-产品
模块实例描述 模块说明及其用途。 连接到生产TIM环境。
TIM服务器主机 托管TIM服务器的WebSphere®Application Server(WAS)实例所在的主机名或网络地址。 timprod.enterprise.com
TIM服务器IIOP端口 承载TIM服务器的WAS实例的IIOP端口号。 2809
TIM管理员标识 用于访问TIM中数据的TIM帐户的用户ID。 请注意,诸如“项目管理器”之类的管理员帐户不是强制性的,但该帐户将需要足够的访问权限才能读取和搜索TIM中的帐户和服务数据。 TIM ACI可用于在TIM中为此处指定的用户授予最小权限。 项目经理
TIM管理员密码 上一个参数中描述的TIM管理员密码。 Ccs0kwcs
TIM基本DN LDAP专有名称由TIM中配置的组织的简称以及TIM数据存储所在的LDAP后缀构成。 ou = enterprise,dc = com
WAS管理员ID 用于向托管TFIM运行时的WAS实例进行身份验证的用户ID。 仅当在WAS的TFIM运行时实例中启用了管理安全性时,才需要提供此参数的值。 wasadmin
WAS管理员密码 上一个参数指定的帐户密码。 仅当在WAS的TFIM运行时实例中启用了管理安全性时,才需要提供此参数的值。 c7i3hj%H
JAAS应用程序登录 在WAS的TFIM实例中配置的Java认证和授权服务(JAAS)应用程序登录名,用于对TIM服务器进行认证。 ITIM

表2列出了在信任模块链中配置TIM映射模块的实例时可用的配置属性。 这些参数特定于特定的身份转换。 从模块实例属性中获取定义TIM服务器的配置数据。

表2.模块配置属性
配置属性 描述 样本值
传入帐户的服务名称 TIM服务的名称,在其中搜索与作为TIM映射模块的输入而接收到的身份相对应的帐户。 服务的名称假定为唯一。 活动目录-昆士兰
目标帐户的服务名称 TIM服务的名称,在其中搜索由传入标识的所有者拥有的帐户。 同样,服务的名称被假定为唯一。 企业目录
目标帐户对象类 TIM中使用的LDAP对象类,用于存储由先前参数指定的服务帐户的帐户数据。 电子账户
目标帐户属性 从映射帐户检索到的其他属性的列表。 每行一个属性值。 命名

邮件

有关利用STSModule接口的更多信息,请查阅本文末尾“ 相关主题”部分中列出的优秀教程。

TIM API

TIM API是一种API,可提供从Java和J2EE™环境到TIM服务器的远程连接。 在已安装的TIM系统上提供了大量资源,以帮助使用TIM API开发应用程序。 ITIM_HOME /extensions/doc/index.html是使用Java API的概念性信息和示例代码的起点。 ITIM_HOME /extensions/api/index.html是使用TIM API的JavaDoc主页。

清单1和2中显示了有关映射模块如何使用TIM API的伪代码。

清单1.模块初始化伪代码
Create a TIM platform context
Create a JAAS login context
清单2.映射伪代码
Locate the service for the incoming identity.
Search for account from incoming service that matches the incoming identity.
Find the owner of that account
Locate the service for the target identity.
Search for an account from the target service owned by the owner from the previous step.
Return attributes from target account.

实作

本文末尾的“可下载资源”部分提供了该解决方案的源代码。 可以使用Project Interchange格式将其导入Eclipse环境。

该实现的一个重要且可能不是显而易见的方面是,用于构造TIM平台上下文和登录上下文的代码需要在J2EE环境中运行,而不是在OSGi环境中运行。 本文末尾的“ 相关主题”部分中描述了一种用于实现此目的的技术。 清单3显示了实现J2EEContainerAction类的代码段。 清单4展示了如何调用清单3中的代码,以使其按照此解决方案的要求在J2EE环境中运行。

清单3. LoginHelper
public class LoginHelper implements J2EEContainerAction
{
  ...
  public Object run()
        throws LoginException, RemoteException, ApplicationException
  {
    create platform context
    create login context
  }
}
清单4.调用LoginHelper
LoginHelper helper = new LoginHelper(...);

try {
  J2EEContainerFactory.runInJ2EEContainer(helper);
} catch (J2EEContainerActionException jcae) {
  throw new STSModuleException(jcae.getMessage(), jcae);
}

组态

本节介绍了将TIM映射模块用于TFIM所需的配置步骤。

准备WebSphere Application Server(WAS)环境

要使用WAS的TIM Java API,请配置WAS实例需求,以便存在并可以调用所需的TIM类。 在此示例中,需要在安装并运行TFIM STS(运行时)的WAS实例中执行这些步骤。

从已安装的TIM系统中找到TIM API JAR文件。 JAR文件将位于TIM服务器上的ITIM_HOME / lib目录中。 在运行TFIM运行时的计算机上,应该将JAR文件复制到WAS_HOME / lib / ext目录,或者如果正在使用嵌入式WAS版本(例如在测试环境中),则复制到WAS_HOME / lib目录。 要复制的JAR文件是:

  • api_ejb.jar
  • itim_api.jar
  • itim_common.jar
  • itim_server_api.jar
  • jlog.jar

重新启动托管TFIM运行时的WebSphere Application Server实例。

要对TIM服务器进行身份验证,需要在执行TFIM运行时的WAS实例中创建JAAS应用程序模块。 请使用以下步骤实现此结果。

  1. 使用浏览器,登录到相应的WAS实例的Integrated Solutions Console(ISC)。
  2. 从左侧导航菜单,导航到“ 安全性” /“安全管理,应用程序和基础结构任务”
  3. 展开Java身份验证和授权服务容器。
  4. 选择“ 应用程序登录” 。 显示JAAS应用程序登录配置的当前列表。
  5. 单击“ 新建”以创建新配置。
  6. 提供别名值ITIM
  7. 点击应用
  8. 其他属性下 ,选择JAAS登录模块 。 显示当前JAAS应用程序登录模块的列表。 它应该是空的。
  9. 点击新建
  10. 输入com.ibm.itim.apps.jaas.spi.PlatformLoginModule作为模块类名称。
  11. 选中使用登录模块代理复选框。
  12. 单击确定
  13. 单击保存将这些配置更改直接保存到主配置。

部署TIM STS模块

由于TFIM STS模块打包为OSGi插件,因此可以快速部署它们以更新TFIM运行时环境。 使用此过程来部署TIM映射插件。

  1. 将下载的com.tivoli.am.fim.demo.tim.mapping_6.2.0.jar复制到FIM_HOME / plug-ins目录。
  2. 使用浏览器,登录到相应的WAS实例的Integrated Solutions Console(ISC)。
  3. 导航到“ Tivoli Federated Identity Manager” /“域管理” /“运行时节点管理”任务。
  4. 单击“ 发布插件”按钮,如图5所示。这将使用TFIM安装目录中的插件将TFIM Management Service更新到上述步骤1中将新插件复制到的位置。
图5.发布插件
发布插件
  1. 单击加载配置更改到Tivoli Federated Identity Manager运行时按钮,如图6所示,以更新TFIM运行时。
图6.更新TFIM运行时配置
更新TFIM运行时配置
  1. 通过导航到ISC中的“ 配置信任服务 / 模块类型”选项,验证模块名称com.tivoli.am.fim.demo.tim.mapping.TIMMappingModule现在已显示在模块列表中。
  2. 检查是否可以从TFIM计算机解析在TIM服务器的WebSphere Application Server实例中指定的主机名。 之所以需要执行此步骤,是因为在TIM API初始化期间,WAS的TIM实例提供了与TIM服务器通信的端点。 可以通过检查TIM使用的WAS实例中的文件WAS_HOME / profiles / profile-name /logs/AboutThisProfile.txt来确定WAS TIM实例使用的主机名。 如果需要,请在TFIM服务器上更新DNS或本地主机配置数据库。

使用解决方案

要使用上一部分中部署的TIM映射模块,涉及三个步骤:

  1. 创建和配置模块实例
  2. 在模块链中使用模块实例
  3. 测试解决方案

在随后的小节中将介绍这些步骤。

创建一个模块实例

需要先创建模块实例,然后才能将其用于信任模块链。 表1描述了TIM映射模块实例的配置属性。 图7显示了如何使用Integrated Solutions Console来配置TIM映射模块实例。 有关为配置参数选择合适值的指导,请参见表1。

图7. TIM映射模块实例属性
TIM映射模块实例属性

TIM映射模块的单个实例可以在多个信任模块链中使用。 如果TFIM环境需要连接到多个TIM环境,或者需要使用不同的凭据来访问同一TIM环境,则必须配置TIM映射模块的多个实例。

在模块链中使用模块实例

图8显示了在模块链中配置后TIM映射模块的外观。 有关为配置参数选择合适的值的指导,请参见表2。

图8.在模块链中配置TIM映射模块
在模块链中配置TIM映射模块

测试解决方案

查看TIM映射模块运行情况的简单测试工具使用一个简单的WS-Trust RequestSecurityToken并将其发送到TFIM安全令牌服务。 TFIM内部STS通用用户(STSUUSER)是传入和传出令牌类型的便捷表示。 可下载资源部分中提供了一个示例输入消息,并在清单5中显示了清单5。清单5中的安全令牌包括STSUUSER安全令牌,该令牌包含单个名称属性。 不包括其他属性。

清单5. RequestSecurityToken消息
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
  xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"
  xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
  xmlns:stsuuser="urn:ibm:names:ITFIM:1.0:stsuuser">
  <soapenv:Header/>
  <soapenv:Body>
    <wst:RequestSecurityToken>
      <wst:RequestType>
        http://schemas.xmlsoap.org/ws/2005/02/trust/Validate
      </wst:RequestType>
      <wst:Issuer>
        <wsa:Address>urn:test</wsa:Address>
      </wst:Issuer>
      <wsp:AppliesTo>
        <wsa:EndpointReference>
          <wsa:Address>urn:test:timmap</wsa:Address>
        </wsa:EndpointReference>
      </wsp:AppliesTo>
      <wst:Base>
        <stsuuser:STSUniversalUser>
          <stsuuser:Principal>
            <stsuuser:Attribute name="name">
              <stsuuser:Value>dbrown</stsuuser:Value>
            </stsuuser:Attribute>
          </stsuuser:Principal>
          <stsuuser:AttributeList />
        </stsuuser:STSUniversalUser>
      </wst:Base>
    </wst:RequestSecurityToken>
  </soapenv:Body>
</soapenv:Envelope>

TFIM测试环境配置有信任模块链,该信任模块链包括:

  1. 验证模式下的STSUUSER令牌模块
  2. 映射模式下的TIM映射模块
  3. 发行模式下的STSUUSER令牌模块

HTTP客户端(例如curl)可用于将WS-Trust请求传递到TFIM STS。 清单6提供了用法示例。

清单6.用于测试TIM映射模块的Curl命令
curl.exe --header "soapaction: anything" --data-binary @rst.xml \
    http://10.251.231.128:9080/TrustServer/SecurityTokenService"

清单7显示了使用TIM映射模块成功处理后的样本响应。 请注意,生成的STSUUSER安全令牌包含另一个用户名。 此外,还将从目标TIM帐户中提取姓和公用名属性,并将其包括在生成的安全令牌中。

清单7. RequestSecurityTokenResponse消息
<soapenv:Envelope
  xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <soapenv:Header />
  <soapenv:Body>
    <wst:RequestSecurityTokenResponse Context=""
      wsu:Id="uuid3f8593db-011b-1170-9091-8fc4ea885e3e"
      xmlns:wst="http://schemas.xmlsoap.org/ws/2005/02/trust"
      xmlns:wsu="...">
      <wsp:AppliesTo
        xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing"
        xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
        <wsa:EndpointReference>
          <wsa:Address>urn:test:timmap</wsa:Address>
        </wsa:EndpointReference>
      </wsp:AppliesTo>
      <wst:RequestedSecurityToken>
        <stsuuser:STSUniversalUser
          xmlns:stsuuser="urn:ibm:names:ITFIM:1.0:stsuuser">
          <stsuuser:Principal>
            <stsuuser:Attribute name="name" type="">
              <stsuuser:Value>
                cn=David Brown
              </stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="Username"
              type="...">
              <stsuuser:Value>
                cn=David Brown
              </stsuuser:Value>
            </stsuuser:Attribute>
          </stsuuser:Principal>
          <stsuuser:AttributeList>
            <stsuuser:Attribute name="sn">
              <stsuuser:Value>Brown</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="cn">
              <stsuuser:Value>
                cn=David Brown
              </stsuuser:Value>
              <stsuuser:Value>David Brown</stsuuser:Value>
            </stsuuser:Attribute>
          </stsuuser:AttributeList>
          <stsuuser:RequestSecurityToken>
            <stsuuser:Attribute name="KeySize"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>0</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="RequestType"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>
                http://schemas.xmlsoap.org/ws/2005/02/trust/Validate
              </stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="Base"
              type="urn:ibm:names:ITFIM:1.0:stsuuser">
              <stsuuser:Value>
                <stsuuser:STSUniversalUser>
                  <stsuuser:Principal>
                    <stsuuser:Attribute
                      name="name">
                      <stsuuser:Value>
                        dbrown
                      </stsuuser:Value>
                    </stsuuser:Attribute>
                  </stsuuser:Principal>
                  <stsuuser:AttributeList />
                </stsuuser:STSUniversalUser>
              </stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="Forwardable"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>true</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="RenewingAllow"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>true</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="Issuer"
              type="http://schemas.xmlsoap.org/ws/2005/02/trust">
              <stsuuser:Value>urn:test</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="RenewingOk"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>false</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="AllowPostDating"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>false</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="Delegatable"
              type="com:tivoli:am:fim:sts:RST">
              <stsuuser:Value>false</stsuuser:Value>
            </stsuuser:Attribute>
            <stsuuser:Attribute name="AppliesTo"
              type="http://schemas.xmlsoap.org/ws/2004/09/policy">
              <stsuuser:Value>urn:test:timmap</stsuuser:Value>
            </stsuuser:Attribute>
          </stsuuser:RequestSecurityToken>
          <stsuuser:ContextAttributes />
          <stsuuser:AdditionalAttributeStatement />
        </stsuuser:STSUniversalUser>
      </wst:RequestedSecurityToken>
      <wst:Status>
        <wst:Code>http://schemas.xmlsoap.org/ws/2005/02/trust/status/valid</wst:Code>
      </wst:Status>
    </wst:RequestSecurityTokenResponse>
  </soapenv:Body>
</soapenv:Envelope>

结论

本文介绍了利用存储在TIM中的身份元数据的TFIM映射模块的设计和实现。 此模块可用于企业服务总线等组件中的SOA身份传播方案中,以转换身份信息。


翻译自: https://www.ibm.com/developerworks/tivoli/library/t-tfim-tim/index.html

ibm tivoli

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值