ibm tivoli

什么是Tivoli Federated Identity Manager信息服务?

Tivoli Federated Identity Manager(TFIM)以Web服务的形式提供一个接口,用于查询联盟,联盟用户和用户别名信息。 TFIM信息服务可用于发现以下信息:

  • 一组已配置的联盟及其端点。
  • 联盟和关联端点的伙伴配置集。
  • 用户在特定联合身份验证中是否具有配置的别名(对于使用别名服务的联合身份验证和应用程序)。
  • 特定联合上下文中用户的别名集。

在TFIM 6.2中,定义接口的Web服务定义语言(WSDL)文档是受支持的集成点。 可以在WebSphere®的已部署应用程序目录中找到此WSDL文档,该文件名为fiminfo.wsdl ,在该目录中,TFIMRuntime部署在:
<WebSphere_installedApps_root> /ITFIMRuntime.ear/com.tivoli.am.fim.war.infoservice.war/WEB-INF/wsdl/fiminfo.wsdl 。 您将需要获取此WSDL文件,以利用本文中显示的技术。

TFIM信息服务提供两个端点。 第一个终结点(称为InfoServiceXML终结点)为所有已配置的联盟和合作伙伴返回XML文档。 TFIM ivtapp使用来自此终结点的数据来呈现联合页面,并且可以使用Web浏览器或其他HTTP用户代理对其进行访问。 可以在http:// fim_host : fim_port / Info / InfoServiceXML中找到该端点。

第二个端点,称为InfoService端点,是信息服务WSDL的SOAP端点。 该端点将是本文的重点,可以在http:// fim_host : fim_port / Info / InfoService中找到。

Tivoli Federated Identity Manager信息服务为何有用?

通常,应用程序可能会使用信息服务来动态显示供用户单击的链接,特别是联盟链接,该链接可能会根据配置的伙伴以及用户当前是否与特定伙伴联盟而有所不同。 联合用户信息与使用别名作为名称标识符的Liberty和SAML 2.0联合特别相关。

从别名服务查询用户别名的能力对于以用户为中心的身份方案(例如信息卡和OpenID依赖方配置)特别有用,在这种情况下,别名服务用于存储从以用户为中心的身份到用户的映射帐户。 这也可能适用于通过com.tivoli.am.fim.trustserver.sts.utilities.IDMappingExtUtils API使用TFIM别名服务的其他应用程序和联合类型。

TFIM信息服务接口说明

TFIM信息服务接口提供了三个入口点,用于查询TFIM环境中的联盟,联盟用户和用户别名信息。 从TFIM 6.0开始,这两个入口点是federationsQuery Web服务方法和federatedUserInfoQuery Web服务方法。 在TFIM 6.2(修订包1)中添加了第三个入口点userAliasInfoQuery ,以解决在同一联合上下文中查询多个用户别名的限制。

federationsQuery

federationsQuery Web服务方法用于查询有关联盟的信息。 对此Web服务方法的调用将返回FederationsQueryResult元素。 该元素包含联盟的数量和每个联盟的联盟信息,例如联盟名称,联盟ID,联盟协议,联盟的单点登录协议服务(SPS)的路径,联盟具有的伙伴数有关每个合作伙伴实体的信息以及有关其自身的信息。 此方法要求在请求内设置completeResultsLimit实体。 如果不需要限制,则在执行查询之前应将其设置为-1。

federatedUserInfoQuery

federatedUserInfoQuery Web服务方法用于查询有关用户及其别名在别名服务中的条目的信息,以用于诸如使用别名服务用于联合帐户的联盟的Liberty和SAML 2.0。 对此Web服务方法的调用将返回FederatedUserInfoQueryResult元素。 FederatedUserInfoQueryResult元素包含一个标志,该标志指示是否已发现要联合用户,还包含别名信息,例如用户的自身/伙伴/旧别名(如果存在)。 请注意,尽管别名服务允许每个伙伴存储一个以上每种类型的别名,但是此信息服务接口当前仅支持为每个伙伴返回最多每种类型的一个别名。 Liberty和SAML 2.0协议每个合作伙伴最多仅使用每种类型的一个别名,因此这是用于那些联盟类型确定用户是否与特定伙伴联盟的合适方法。 此方法要求在发出请求之前设置用户名。 也可以指定伙伴ID的列表,但如果不存在,则将使用所有现有联盟的联盟ID。 出于性能原因,建议您在请求中提供伙伴ID列表(如果已知)。

userAliasInfoQuery

TFIM 6.2修订包1中引入了userAliasInfoQuery Web服务方法,该方法用于查询别名服务中有关用户的信息及其别名信息。 对此Web服务方法的调用将返回UserAliasInfoQueryResult元素。 UserAliasInfoQueryResult元素包含用户的self / partner / old别名(如果存在)。 与federatedUserInfoQuery不同,此Web服务方法允许根据提供的结果限制返回许多别名。 如果未指定结果限制,则返回所有别名。 此方法还允许调用者通过在请求中包括别名类型列表来指定要返回的别名类型(来自self,partner,old)。 此方法要求在发出请求之前在请求对象中设置username参数。 也可以指定伙伴ID的列表(在IDMappingExtUtils实用程序函数中也称为联盟上下文ID),但是如果不存在,则该列表将由所有已配置联盟的federationId组成。 同样,建议提供伙伴ID(如果已知)。 对于以用户为中心的身份帐户别名方案,需要提供合作伙伴ID,因为提供给IDMappingExtUtils实用程序功能的联合上下文ID将与配置的联合不匹配。

TFIM信息服务接口的安全性

在典型的生产环境中,信息服务界面不应暴露给最终用户。 如果使用Tivoli Access Manager(TAM),则可以使用TAM ACL保护信息服务URL端点,以确保只有通过TAM使用适当认证的客户机才能访问它们。

无论有无TAM作为联系点,您都可以利用J2EE™容器安全性约束来保护对Information Service端点的访问。 Information Service Web应用程序定义了一个称为FIMAdministrator的必需角色,用于访问服务中的两个URL端点。 如果启用了WebSphere安全性,则可以将用户组(或需要的话,未经身份验证的用户)分配给FIMAdministrator角色,并且只有该角色中的用户才能访问Information Service端点。

使用Rational Application Developer开发TFIM信息服务客户端

为了在TFIM 6.2中使用信息服务,需要从提供的信息服务WSDL文档中创建Web服务客户端。 Rational Application Developer(RAD)提供了使用WebSphere绑定生成Web服务客户端的Java™实现的功能。 Eclipse也可以用于生成Web服务客户端,通常使用Axis绑定。 我们的示例将使用Rational Application Developer。

执行以下步骤来创建Web服务客户端:

  1. 将信息服务WSDL(fiminfo.wsdl)从TFIM服务器复制到Rational Application Developer机器上的临时目录中。 WSDL可以在以下目录中找到:

    <WebSphere_installedApps_root> /ITFIMRuntime.ear/com.tivoli.am.fim.war.infoservice.war/WEB-INF/wsdl/fiminfo.wsdl

  2. 将以下JAR文件从TFIM服务器的plugins目录复制到Rational Application Developer机器上的一个临时目录中。 插件目录可以在<FIM_install_root> / plugins中找到。
    • org.eclipse.equinox.common _ *。jar
    • org.eclipse.equinox.registry _ *。jar
    • org.eclipse.core.runtime _ *。jar
    • org.eclipse.osgi _ *。jar
    • com.ibm.ws.bootstrap _ *。jar

    其中*表示基于TFIM安装的文件的版本号。

  3. 打开Rational Application Developer,然后选择File- > New- > Other...。新向导将打开, 如图1所示:
    图1.新建项目向导
  4. 奇才:过滤器字段类型Web服务客户端 ,然后选择Web服务客户端并点击下一步 ,如图图2 :
    图2.项目向导-Web服务客户端
  5. 服务定义字段中,输入WSDL的路径作为URI。 单击客户端项目链接,然后输入适当的项目名称。 单击Ok ,然后单击Next , 如图3所示:
    图3.项目向导-Web服务定义
  6. 选中“ 定义要打包的名称空间的自定义映射” ,然后单击“ 下一步” , 如图4所示:
    图4.项目向导-Web服务代理页面
  7. 显示名称空间到软件包的映射屏幕。 单击Add , 如图5所示 。
  8. 在“ 名称空间”字段中,输入urn:ibm:names:ITFIM:info:1.0 ,在“ 包”字段中,输入com.tivoli.am.fim.infoservice.wsdl.client , 如图5所示:
    图5.项目向导-客户端名称空间到程序包的映射
  9. 点击完成

RAD将根据WSDL生成类,这些类可用于创建信息服务客户端应用程序。

创建一个示例应用程序以利用信息服务客户端

现在RAD从WSDL创建了一个Web服务客户端,可以编写一个客户端应用程序来利用它。 下面概述了创建示例应用程序的步骤。

  1. 单击文件 -> 新建 ->
  2. 在“ 源文件夹:”字段中,输入com.tivoli.am.fim.infoservice.wsdl.client / src 。 在“ 名称:”字段中,输入com.tivoli.am.fim.infoservice.wsdl.client.demo , 如图6所示:
    图6.新的Java包
  3. 点击完成
  4. 右键单击该项目,然后选择“ 属性”
  5. 从左侧列表中选择Java Build Path选项。
  6. 单击选项卡。
  7. 单击添加外部JAR ...
  8. 浏览到从TFIM环境中复制JAR的临时文件夹。
  9. 选择以下文件,然后单击“ 打开”
    • org.eclipse.equinox.common _ *。jar
    • org.eclipse.equinox.registry _ *。jar
    • org.eclipse.core.runtime _ *。jar
    • org.eclipse.osgi _ *。jar
    • com.ibm.ws.bootstrap _ *。jar

    其中*表示版本号。 现在,所选文件应在构建路径上显示为JAR文件, 如图7所示:

    图7. Java构建路径
  10. 使用公共静态void main方法在com.tivoli.am.fim.infoservice.wsdl.client.demo包中创建一个名为Main.java的新类。

样品申请

清单1中显示的示例应用程序演示了如何使用生成的Web服务客户端打印出联合身份验证和联合身份验证用户信息。 该示例应用程序包含四个测试。

  1. 第一个测试生成对所有联盟的查询,如果成功,则打印出联盟信息。
  2. 第二个测试生成查询以在特定的命名联合身份验证中查找特定用户,如果查询成功,则打印出联合的用户信息。
  3. 第三个测试生成查询,以查找特定命名联合中特定用户的每个自身别名,如果成功,则打印出用户别名信息。
  4. 第四个测试生成一个查询,以查找特定命名联合中特定用户的每个自身别名,旧别名和伙伴别名中的最多两个,如果成功,则打印出用户别名信息。
清单1.示例应用程序
package com.tivoli.am.fim.infoservice.wsdl.client.demo;import java.rmi.RemoteException;import com.tivoli.am.fim.infoservice.wsdl.client.EndpointType;
import com.tivoli.am.fim.infoservice.wsdl.client.FIMInfoPortTypeProxy;
import com.tivoli.am.fim.infoservice.wsdl.client.FederatedUserInfoQueryResultType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederatedUserInfoQueryType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederatedUserInfoType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederationEntityInfoType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederationInfoType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederationsQueryResultType;
import com.tivoli.am.fim.infoservice.wsdl.client.FederationsQueryType;
import com.tivoli.am.fim.infoservice.wsdl.client.UserAliasInfoQueryResultType;
import com.tivoli.am.fim.infoservice.wsdl.client.UserAliasInfoQueryType;
import com.tivoli.am.fim.infoservice.wsdl.client.UserAliasInfoType;
import com.tivoli.am.fim.infoservice.wsdl.client.UserAliasListType;public class Main {static final String ALIAS_TYPE_SELF = "SELF";static final String ALIAS_TYPE_PARTNER = "PARTNER";static final String ALIAS_TYPE_OLD = "OLD";public static void main(String[] args) {String endpoint = "http://localhost:9080/Info/InfoService";FIMInfoPortTypeProxy fimClient = new FIMInfoPortTypeProxy();fimClient.setEndpoint(endpoint);System.setProperty("com.ibm.ssl.performURLHostNameVerification", "true");/** First test is a dump of all federations*/FederationsQueryType fedsQuery = new FederationsQueryType();fedsQuery.setCompleteResultsLimit(new Integer(-1));fedsQuery.setFederationDisplayNames(null);fedsQuery.setFederationIds(null);FederationsQueryResultType fedsQueryResult = null;try {fedsQueryResult = fimClient.federationsQuery(fedsQuery);} catch (RemoteException e) {System.err.println("RemoteException occurred performing the "+ " federation query.");}if (fedsQueryResult != null) {System.out.println(" **************" + " FederationQueryResult "+ "*************");dumpFederationsQueryResult(fedsQueryResult);System.out.println(" **************"+ " End FederationQueryResult " + "*************");}/** Second test is if the user is in a particular named federations*/String userId = "simoncanning";String[] partnerIds = new String[] { "myfedctx" };FederatedUserInfoQueryType fedUserQuery = new FederatedUserInfoQueryType();fedUserQuery.setUserId(userId);fedUserQuery.setPartnerIds(partnerIds);FederatedUserInfoQueryResultType fedUserQueryResult = null;try {fedUserQueryResult = fimClient.federatedUserInfoQuery(fedUserQuery);} catch (RemoteException e) {System.err.println("RemoteException occurred performing the"+ " federated user info query.");}if (fedUserQueryResult != null) {System.out.println(" **************"+ " FederatedUserInfoQueryResult " + "*************");dumpFederatedUserInfoQueryResult(fedUserQueryResult);System.out.println(" **************"+ " End FederatedUserInfoQueryResult " + "*************");}/** Third test is to get all self aliases for a particular user in* federations*/UserAliasInfoQueryType userAliasInfoQueryRequest1 = new UserAliasInfoQueryType();userAliasInfoQueryRequest1.setUserId(userId);userAliasInfoQueryRequest1.setPartnerIds(partnerIds);String[] aliasTypeFilterList1 = new String[] { ALIAS_TYPE_SELF };userAliasInfoQueryRequest1.setAliasTypeFilterList(aliasTypeFilterList1);UserAliasInfoQueryResultType userAliasQueryResult1 = null;try {userAliasQueryResult1 = fimClient.userAliasInfoQuery(userAliasInfoQueryRequest1);} catch (RemoteException e) {System.err.println("RemoteException occurred performing the"+ " first user alias info query.");}if (userAliasQueryResult1 != null) {System.out.println(" **************" + " UserAliasInfoQueryResult1 "+ "*************");dumpUserAliasInfoQueryResult(userAliasQueryResult1);System.out.println(" **************"+ " End UserAliasInfoQueryResult1 " + "*************");}/** Fourth test is to get aliases for a particular user in* federations but limit to returning a maximum of 2 aliases per type*/UserAliasInfoQueryType userAliasInfoQueryRequest2 = new UserAliasInfoQueryType();userAliasInfoQueryRequest2.setUserId(userId);userAliasInfoQueryRequest2.setPartnerIds(partnerIds);userAliasInfoQueryRequest2.setCompleteResultsLimit(new Integer(2));UserAliasInfoQueryResultType userAliasQueryResult2 = null;try {userAliasQueryResult2 = fimClient.userAliasInfoQuery(userAliasInfoQueryRequest2);} catch (RemoteException e) {System.err.println("RemoteException occurred performing the"+ " second user alias info query.");}if (userAliasQueryResult2 != null) {System.out.println(" **************" + " UserAliasInfoQueryResult2 "+ "*************");dumpUserAliasInfoQueryResult(userAliasQueryResult2);System.out.println(" **************"+ " End UserAliasInfoQueryResult2 " + "*************");}}static void dumpFederationsQueryResult(FederationsQueryResultType fedsQueryResult) {System.out.println("Number of FIM federations: "+ fedsQueryResult.getNumFIMFederations());FederationInfoType[] fedInfoArray = fedsQueryResult.getFederationInfos();for (int i = 0; i < fedInfoArray.length; i++) {FederationInfoType fedInfo = fedInfoArray[i];System.out.println("[" + fedInfo.getDisplayName() + "]: {");dumpFederationInfo(fedInfo);System.out.println("}");}}static void dumpFederationInfo(FederationInfoType fedInfo) {System.out.println("  Id: " + fedInfo.getId());System.out.println("  Display Name: " + fedInfo.getDisplayName());System.out.println("  Protocol: " + fedInfo.getProtocol());System.out.println("  Path to SPS: " + fedInfo.getPathToSps());System.out.println("  Self Entity: {");dumpFederationEntityInfo(fedInfo.getSelf().getFederationEntityInfo());System.out.println("  }");FederationEntityInfoType[] partners = fedInfo.getPartners();System.out.println("  Number of partners: "+ (partners == null ? 0 : partners.length));if (partners != null && partners.length > 0) {for (int i = 0; i < partners.length; i++) {System.out.println("  Partner[" + i + "]: {");dumpFederationEntityInfo(partners[i]);System.out.println("  }");}}}static void dumpFederationEntityInfo(FederationEntityInfoType fedEntityInfo) {System.out.println("    Display Name: "+ fedEntityInfo.getDisplayName());System.out.println("    ProtocolId: " + fedEntityInfo.getProtocolId());System.out.println("    Role: " + fedEntityInfo.getRole());System.out.println("    Endpoints: {");EndpointType[] endpoints = fedEntityInfo.getEndpoints();if (endpoints != null && endpoints.length > 0) {for (int i = 0; i < endpoints.length; i++) {System.out.println("      Endpoint[" + endpoints[i].getType()+ "]: {");dumpEndpoint(endpoints[i]);System.out.println("      }");}}System.out.println("    }");
}static void dumpEndpoint(EndpointType endpoint) {System.out.println("        Type: " + endpoint.getType());System.out.println("        Location: " + endpoint.getValue());}static void dumpFederatedUserInfoQueryResult(FederatedUserInfoQueryResultType fedUserQueryResult) {System.out.println("isFound: " + fedUserQueryResult.isFound());FederatedUserInfoType[] fedUsersInfo = fedUserQueryResult.getFederatedUserInfos();System.out.println("Number of Partners: " + fedUsersInfo.length);for (int i = 0; i < fedUsersInfo.length; i++) {String partnerId = fedUsersInfo[i].getPartnerId();System.out.println("  Partner[" + partnerId + "]: {");dumpFederatedUserInfo(fedUsersInfo[i]);System.out.println("  }");}}static void dumpFederatedUserInfo(FederatedUserInfoType fedUserInfo) {System.out.println("    IsFederated: " + fedUserInfo.isFederated());System.out.println("    Self Alias: " + fedUserInfo.getSelfAlias());System.out.println("    Partner Alias: "+ fedUserInfo.getPartnerAlias());System.out.println("    Old Alias: " + fedUserInfo.getOldAlias());}static void dumpUserAliasInfoQueryResult(UserAliasInfoQueryResultType userAliasQueryResult) {UserAliasInfoType[] usersAliasInfo = userAliasQueryResult.getUserAliasInfos();System.out.println("Number of Partners: " + usersAliasInfo.length);for (int i = 0; i < usersAliasInfo.length; i++) {String partnerId = usersAliasInfo[i].getPartnerId();System.out.println("  Partner[" + partnerId + "]: {");dumpUserAliasInfo(usersAliasInfo[i]);System.out.println("  }");}}static void dumpUserAliasInfo(UserAliasInfoType userAliasInfo) {UserAliasListType[] ual = userAliasInfo.getAliasLists();for (int i = 0; i < ual.length; i++) {String type = ual[i].getType();String[] userAliases = ual[i].getUserAlias();if (type != null && userAliases != null &&userAliases.length > 0) {dumpUserAliasesOfType(type, userAliases);}}}static void dumpUserAliasesOfType(String type, String[] aliases) {if (aliases != null && aliases.length > 0) {System.out.print("    " + type + " Aliases: {");for (int i = 0; i < aliases.length; i++) {System.out.print(aliases[i]);if (i < aliases.length - 1) {System.out.print(", ");}}System.out.println("}");}}
}

样本应用程序输出

下面的清单包含上面示例应用程序的输出。 所查询的服务器包含一个OpenID服务提供者联合,而myfedctx合作伙伴中的用户simoncanning至少包含自身别名selfAlias1 。 该用户具有多个自身和伙伴别名。

清单2.示例应用程序输出
************** FederationQueryResult *************
Number of FIM federations: 2
[OpenIdIdp]: {Id: uuidbdc0782f-011a-1106-af91-c2c4fd12f8ebDisplay Name: OpenIdIdpProtocol: OpenIDPath to SPS: https://www.ibmidentitydemo.com/FIM/spsSelf Entity: {Display Name: ibmProtocolId: https://www.ibmidentitydemo.com/FIM/sps/OpenIdIdp/openidRole: ipEndpoints: {Endpoint[OPENID.IPSiteManagerEndpoint]: {Type: OPENID.IPSiteManagerEndpointLocation: https://www.ibmidentitydemo.com/FIM/sps/OpenIdIdp/openid/sites}Endpoint[OPENID.IPAuthnEndpoint]: {Type: OPENID.IPAuthnEndpointLocation: https://www.ibmidentitydemo.com/FIM/sps/OpenIdIdp/openid/authn}Endpoint[OPENID.IPSSOEndpoint]: {Type: OPENID.IPSSOEndpointLocation: https://www.ibmidentitydemo.com/FIM/sps/OpenIdIdp/openid/sso}}}Number of partners: 1Partner[0]: {Display Name: ibmProtocolId: *Role: spEndpoints: {}}
}
[OpenIdSp]: {Id: uuidba34a150-011b-1253-847b-8415768961ecDisplay Name: OpenIdSpProtocol: OpenIDPath to SPS: https://www.ibmidentitydemo.com/FIM/spsSelf Entity: {Display Name: IBMProtocolId: https://www.ibmidentitydemo.com/FIM/sps/OpenIdSp/openidRole: spEndpoints: {Endpoint[OPENID.SPLoginReturnEndpoint]: {Type: OPENID.SPLoginReturnEndpointLocation: https://www.ibmidentitydemo.com/FIM/sps/OpenIdSp/openid/loginreturn}Endpoint[OPENID.SPLoginEndpoint]: {Type: OPENID.SPLoginEndpointLocation: https://www.ibmidentitydemo.com/FIM/sps/OpenIdSp/openid/login}}}Number of partners: 1Partner[0]: {Display Name: IBMProtocolId: *Role: ipEndpoints: {}}
}************** End FederationQueryResult *************************** FederatedUserInfoQueryResult *************
isFound: true
Number of Partners: 1Partner[myfedctx]: {IsFederated: trueSelf Alias: selfAlias1Partner Alias: partnerAlias1Old Alias: null}************** End FederatedUserInfoQueryResult *************************** UserAliasInfoQueryResult1 *************
Number of Partners: 1Partner[myfedctx]: {SELF Aliases: {selfAlias1, selfAlias2, selfAlias3}}************** End UserAliasInfoQueryResult1 *************************** UserAliasInfoQueryResult2 *************
Number of Partners: 1Partner[myfedctx]: {PARTNER Aliases: {partnerAlias1, partnerAlias2}SELF Aliases: {selfAlias1, selfAlias2}}************** End UserAliasInfoQueryResult2 *************

可以使用以下ldapsearch命令来验证使用信息服务找到的相同的联合用户信息(前提是您正在使用LDAP别名服务,并且别名服务的LDAP根后缀为cn = itfim): idsldapsearch -h localhost -p 389 -D cn=root -w password -b cn=itfim -s sub "(objectclass=*)"

清单3中所示的结果显示了与信息服务调用中返回的数据相同,如预期的那样:

清单3.别名条目
...secUUID=7b4ac8f1-011b-1572-8bdc-d4f18164cb57,cn=Users,cn=itfim
secUUID: 7b4ac8f1-011b-1572-8bdc-d4f18164cb57
secDn: cn=simoncanning, O=IBM,C=AU
objectclass: secUser
objectclass: cimManagedElement
objectclass: eUser
objectclass: top
secAuthority: itfim
secLoginType: Default:itfim
secPartnerAlias: myfedctx%partnerAlias1
secPartnerAlias: myfedctx%partnerAlias2
secSelfAlias: myfedctx%selfAlias1
secSelfAlias: myfedctx%selfAlias2
secSelfAlias: myfedctx%selfAlias3...

调试和跟踪

为了调试和查看来自信息服务的消息,可以将TFIM服务器配置为输出信息服务组件跟踪消息。 信息服务组件的跟踪字符串是com.tivoli.am.fim.info。* 。

执行以下操作,将TFIM服务器配置为将Information Service跟踪输出到trace.log文件。

  1. 登录到WebSphere管理控制台。
  2. 展开故障排除,然后选择日志和跟踪
  3. 单击适合您的TFIM运行时环境的服务器。
  4. 单击更改日志详细信息级别
  5. 单击运行时选项卡。
  6. 在组件列表中,添加跟踪字符串com.tivoli.am.fim.info。* = all
  7. 单击确定

您还可以利用实时跟踪实用程序(如TCPMON)来监视与信息服务之间的请求和响应。 清单4显示了示例程序中使用TCPMON为UserAliasInfoQuery2测试捕获的跟踪消息的示例(回想此测试最多要求所有别名类型的两个别名):

清单4. UserAliasInfoQuery和响应的TCPMON跟踪
Request:<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header/><soapenv:Body><p147:UserAliasInfoQuery xmlns:p147="urn:ibm:names:ITFIM:info:1.0"completeResultsLimit="2" userId="simoncanning"><PartnerIds><PartnerId>myfedctx</PartnerId></PartnerIds></p147:UserAliasInfoQuery></soapenv:Body>
</soapenv:Envelope>Response:<soapenv:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"xmlns:xsd="http://www.w3.org/2001/XMLSchema"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Header/><soapenv:Body><p147:UserAliasInfoQueryResult xmlns:p147="urn:ibm:names:ITFIM:info:1.0"><UserAliasInfos><UserAliasInfo partnerId="myfedctx"><AliasLists Type="PARTNER"><UserAlias>partnerAlias1</UserAlias><UserAlias>partnerAlias2</UserAlias></AliasLists><AliasLists Type="SELF"><UserAlias>selfAlias1</UserAlias><UserAlias>selfAlias2</UserAlias></AliasLists></UserAliasInfo></UserAliasInfos></p147:UserAliasInfoQueryResult></soapenv:Body>
</soapenv:Envelope>

结论

Tivoli Federated Identity Manager 6.2包含一个Web服务接口,该接口可用于获取联合,联合用户和用户别名信息。 本文展示了如何从TFIM环境中获取WSDL,并使用它通过Rational Application Developer来生成Web服务客户端。 还包括一个示例应用程序,该应用程序演示了如何使用新生成的Web服务客户端。 该应用程序(包括源代码)可从“可下载资源”部分获得。


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

ibm tivoli

ibm tivoli_了解Tivoli Federated Identity Manager信息服务6.2相关推荐

  1. ibm tivoli_在Tivoli Access Manager v6.1 / WebSEAL和Tivoli Integrated Portal v1.1.x之间配置单点登录...

    本文包含集成Tivoli Access Manager(TAM)版本6.1和Tivoli Integrated Portal(TIP)版本1.1.x的优点. 详细的指示信息向您显示如何使用Tivoli ...

  2. ibm tivoli_在Tivoli Access Manager v6.1 / WebSEAL和Tivoli Integrated Portal v1.1.x之间配置单点登录

    ibm tivoli 本文包含集成Tivoli Access Manager(TAM)版本6.1和Tivoli Integrated Portal(TIP)版本1.1.x的优点. 详细的指示信息向您显 ...

  3. ibm tivoli_使用Tivoli Access Manager进行电子商务的加密硬件,使用AIX上的IBM 4960进行WebSEAL的SSL加速

    ibm tivoli 存档日期:2019年5月15日 | 首次发布:2007年10月4日 建立SSL会话最耗费计算资源的部分是解密发送到SSL服务器的SSL会话的公钥. 通过将SSL操作卸载到专用硬件 ...

  4. ibm tivoli_解决Tivoli Directory Server同步问题的方法

    ibm tivoli IBM®Tivoli®Directory Server(TDS)是功能强大且权威的企业目录基础结构,是企业安全性的关键推动因素. 它在为诸如身份管理,门户和Web服务之类的应用程 ...

  5. ibm tivoli_集成Tivoli Directory Integrator和Lotus Connections

    ibm tivoli 存档日期:2019年5月15日 | 首次发布:2009年1月28日 报告IT系统的运行状态可能是一项艰巨的任务. 收集所需信息通常很耗时,为多个相关方找到合适的传递机制可能是一个 ...

  6. ibm tivoli_在Tivoli Access Manager上为电子商务编写外部认证接口服务器

    ibm tivoli 自1995年以来,IBM专家Ori Pomerantz就一直致力于保护计算机网络的安全(并向其他人展示了如何做到这一点).Pomerantz于2003年加入IBM,从那时起,他就 ...

  7. ibm tivoli_在没有用户注册表的情况下使用Tivoli Access Manager for eBusiness WebSEAL

    ibm tivoli 必备知识 本文假定您基本熟悉: Tivoli Access Manager for eBusiness WebSEAL WebSEAL外部认证接口(EAI) Tivoli Fed ...

  8. ibm tivoli_将IBM Tivoli Directory Integrator密码同步器与Tivoli Identity Manager集成

    ibm tivoli IBM Tivoli Directory Integrator支持跨异构系统的通用和身份数据的同步,转换和迁移. Tivoli Directory Integrator可帮助组织 ...

  9. 【IBM Tivoli Identity Manager 学习文档】11 TIM设计思路介绍

    作者:gnuhpc 出处:http://www.cnblogs.com/gnuhpc/ 1.基于角色的权限控制:role-based access control(RBAC) 2.两大组织构件:Peo ...

最新文章

  1. Service IntentService区别 (面试)
  2. 7 个习惯帮你提升Python运行性能
  3. 数据这么多,且看R语言怎么处理!
  4. c++中的函数适配器
  5. Django Admin后台管理功能使用
  6. GBK转unicode码查询表
  7. Python版选择排序算法
  8. @ApiImplicitParam注解的dataType、paramType两个属性的区别?
  9. 字节软件测试岗二面:APP测试问题被虐哭了,直到看到这些知识点
  10. LeetCode 310. 最小高度树(广度优先遍历)
  11. 整理Oracle日期时间函数
  12. 计算机子网掩码在线,IP地址计算器
  13. Windows10关闭自动更新
  14. idb 怎么回复mysql_mysql利用frm和idb文件恢复数据库
  15. win10系统qq截图时屏幕局部自动放大怎么办 解决方法
  16. CH57X/CH58X系列BLE Mesh无线组网方案
  17. ztree通过ajax获取json并勾选checkbook
  18. java 适合练手的java项目
  19. Android studio 之 高级调试技巧,看这一篇够啦
  20. android H5+app混合应用之 - contenteditable属性

热门文章

  1. Linux(Ubuntu)/Windows如何下载配置Chromedriver
  2. remoteview设置渐变色
  3. 深度学习装机、系统、环境配置指南--预算15000
  4. arm linux i2c 总线驱动,ARM-Linux中I2C总线驱动开发
  5. Fc2显示服务器拥挤,fc2视频全攻略
  6. android ac充电模式,出行必备!这才是充电宝正确的打开方式,苹果安卓一起充...
  7. Linux实现myshell
  8. arcengine 读取字体库
  9. android项目管理工具箱,monday可视化项目管理工具
  10. html 选择自动增加行数,为网页中的源代码自动设置行号