引用了一片网上的文章,找了半天没有发现作者,非常抱歉,等找到了在附上。
国内使用 Cognos 的客户群已经达到很大的规模,同时,WebSphere Portal 已经作为越来越成熟的应用集成和个性化定制产品被广大有相关需求的企业所接受。这样,如何把 Cognos 整合到 Portal中,已是越来越多的客户关注的问题。在这之前,由于 Cognos 与 WebSphere Portal 是两款具有不同特性和使用场景的产品(例如:Cognos 默认安装基于 Tomcat,不使用 LDAP。而 Portal 一般基于 WAS 和 LDAP 作为用户存储),所以二者虽然可以整合,但并不彻底,鲜有成熟案例。
近来,Cognos 8 刚被 IBM 收购,Cognos 的整合需求已经可以被更深层次的满足。
那么如何让 Cognos 更具有可扩展性?如何支持 LDAP?如何满足 Portal 单点登录的需要?如何能在 Portal 中直观的展现现有的 Cognos报表?如何利用现有的 Cognos Portlet?如何进行 Cognos 自定义 Portlet 的开发?如何能更彻底的将 Cognos 整合到门户中,是本文要阐述的问题。
本文目的,是使用 IBM WebSphere Portal 产品(以下简称 WP),如何集成 Cognos 产品,实现单点登录和信息统一整合展现。
软件名称 | 备注 |
IBM Cognos 8.2 | 报表展现工具 |
IBM WebSphere Application Server6 | Cognos 应用支持平台、 Cognos 应用、解决方案示例 (其它可选产品:Tomcat 等 Cognos 能支持的产品) |
IBM WebSphere Portal 6.0 | 门户整合展现平台 |
IBM HTTP Server 6.0 | Portal WebServer、Cognos Gateway (其它可选产品:IIS、Apache 等) |
LDAP Server | Cognos 及 Portal 目录服务器 (可选产品:TDS 等) |
DB2 9.5 | 数据存储 |
安装 Portal,在本例中,把 WAS 和 Portal 安装到 c:ibm 下,分别为 c:ibmappserver、c:ibmportalserver、c:ibmprofiles 下。
Ldap Server 安装到 C:ldap 目录下。
- 设定 LDAP 的主机名为:ldap.ibm.com 。端口号为 56274 。
- 在 ldap 上创建关键用户、组:wpsadmin、wpsbind、wpsadmins 。
- Base DN 为:dc=ibm,dc=com
- 用户后缀为:ou=people,dc=ibm,dc=com
- 组后缀为:ou=group,dc=ibm,dc=com
- 用户前缀为:uid
- 组前缀为:cn
然后使用以上参数与相关的任务,启用 Portal 的安全性。
安装 Cognos Server8.2、Cognos Framework
默认安装,将 Cognos8.2 安装在 C:CognosC8 目录下,略。
Framework 默认安装,注意,安装时,应讲 Framework 安装到和 Cognos Server 相同的目录下,略。然后设计若干报表供测试。
安装 IBM HTTP Server 到 C:IBMHTTPServer 目录下。
安装完毕后,修改 httpd.conf 文件,在文件最后,插件设置前,增加以下几行:
ScriptAlias /cognos8/cgi-bin/ "C:/Cognos/c8/cgi-bin/" AllowOverride None Options None Order allow,deny Allow from all </DIRECTORY /> Alias /cognos8/ "C:/Cognos/c8/webcontent/" Options Indexes MultiViews AllowOverride None Order allow,deny Allow from all </DIRECTORY /> |
为了实现 LTPA Token 单点登录方式,我们需要将 Cognos 应用切换到 WAS 上运行,Cognos 需要使用 WAS 的 java 环境进行读写加密参数。故需保证 Cognos Configuration 的运行 java 环境和 WAS 的 java 环境保持一致。可通过下面的步骤做到这一步:
从 binjava1.3.1jrelibext 目录,或者
运行 CMD 命令:
在命令窗口中到 cd C:IBMAppServerbin 目录下运行 setupCmdLine ;运行结束后,不要关闭该窗口,然后进入 Cognos 安装目录,运行 cogconfig ;最后运行 cogconfig 命令后,检查 java 环境是否正确。
注意图中的 J_HOME 应为 C:IBMAppServerjava 目录。
首先,安装 DB2,并运行建库脚本,创建一个 C8 的数据库。
其次,使用 DB2 作为 Content Manager database,Content Manager 库中,输入正确的参数值:如 Host、Port、Alias、Userid、Password 。
从门户和其它产品的集成,不可避免的有以下几个方面要做出选择或者实现相关的功能。在下面的部分,本文仅列出几个常见的选项,以及本例中使用的选项。
可选项:
- Portal 用户管理模块(用户映射表、凭证槽)
- LDAP 统一管理、分发、配置
- 分散 LDAP、TDI 同步(需使用 TIM、TDI 产品组件)
示例环境选择:
- LDAP 统一管理、分发、配置(即 Portal 和 Cognos 共用同一 LDAP)
可选项:
- LTPA(IBM 特有技术,适用于基于 WebSphere/DOMINO 的应用 )
- Form-Based SSO(适用于所有 B/S 应用)
- HTTP Header(适用于所有 B/S 应用)
- TAM 统一认证
- GSO-Lockbox(管理和维护身份信息的对应关系)
- 应用特有认证方式
示例环境选择:
- HTTP Header
- LTPA
- Cognos 特有的 Shared Secret 方式
可选项:
- Portal Portlet、页面授权、Cognos 自授权
- TAM 统一授权
示例环境选择:
- Portal Portlet、页面授权、Cognos 自授权
可选项:
- 报表 URL+WebPage Portlet
- Cognos 自带 Cognos Portlet
- 开发 WebService Portlet(利用 Portlet Factory6.1 或者 Dashboard Framework6.1)
示例环境选择:
- 报表 URL+WebPage Portlet
- Cognos 自带的 Cognos Portlet
系统间 SSO 的实现,其实就是两个系统之间的用户与认证方式的统一。
Cognos 提供以下几种方式实现与 WebSphere Portal 的 SSO:
Cognos 至少有多种种方式与 Portal 实现 SSO,最常见的分别为 Shared Secret 方式、LTPA Token 方式,以及使用 TAM、SiteMinder 等第三方的工具或者扩展开发(统称为其它方式),Shared Secret 和 LTPA Token 方式分别有不同的适用场合。如下图:
图 4. SSO 方法
通俗的讲,上图可以描述为以下语言:
假如 (Cognos 8 authentication namespace 为 LDAP) 并且 ( 由于某种原因不能使用 Shared Secret) 那么 > 选择LTPA Token或者其它方式 否则 假如 (Portal userIDs) 与 (userIDs in a Cognos8 namespace) 匹配 那么 > 选择Shared Secret. 否则 > 只能选择其它方式
这是 Cognos 特有的一种与 Portal 产品进行 SSO 的机制。利用此机制时,与 Cognos 及 Portal 所使用的中间件环境关系不大。如 Cognos 可以跑在 Tomcat 下。
配置过程如下:
1、进入 Cognos 配置界面,为所有认证用户(门户 LDAP)配置一个 namespace。
配置 Cognos 使用与 Portal 一致的 LDAP(也可以不一致,不一致时 UID 必须匹配)。
进入 Security-Authentication 标签,增加 LDAP provider 然后按照适当的 LDAP 配置修改参数 (Host and port, Base Distinguished Name, User lookup),如下图。
图 5. LDAP 配置
设置 Security – Authentication-Cognos 下的“ Allow anonymous access ” 参数为:false。
保存配置信息。重新启动 cognos 。
2、为 LDAP namespace, 配置下列属性。
Use external identity 属性,设为 True 。
External identity mapping 属性 , 设为:uid=${environment("REMOTE_USER")},ou=people 。
3、创建并配置 Custom Java Provider namespace 。
Namespace ID 属性指定一个名称,例如: cpstrusted,该名称将来会在 Portlet 中作为配置参数使用。
Java class name 属性中输入:com.cognos.cps.auth.CPSTrustedSignon,注意大小写是敏感的。
图 6. Custom Java Provider namespace 配置
4、在 Environment,Portal Services 下,配置如下参数。
在 Trusted Signon Namespace ID 属性中,输入在第一步指定的 Namespace ID,注意该 ID 与第三步中的 Namespace ID 不是同一值(即,这里应该是 dominoLDAP,而不是 cpstrusted)。
在 Shared Secret 属性中,任意输入一个值(本例输入 wpsadmin),注意该值也作为将来在 Portlet 中配置的参数出现。
图 7. Portal Services 配置
5、在 Environment ―― Gateway Settings 项下,将 Allow Namespace Override 属性设为 true 。
6、保持配置修改。
7、重启 Cognos 8 服务。
当 Cognos 所在的 WAS Server 与 Portal 所在的 WAS Server 不是同一个 profiles,并且用户注册表是同一个 LDAP 服务器时,可以采用这种方式。
配置 Cognos 使用与 Portal 一致的 LDAP(必须),进入 Security-Authentication 标签,增加 LDAP provider 然后按照适当的 LDAP 配置修改参数 (Host and port, Base Distinguished Name, User lookup),如下图。
图 8. LDAP 配置
设置 Security – Authentication-Cognos 下的“ Allow anonymous access ” 参数为:false.
保存配置信息。重新启动 cognos 。
为 LDAP namespace, 配置下列属性:
- Use external identity 属性,设为 True 。
- External identity mapping 属性 , 设为:
uid=${environment("USER_PRINCIPAL")},ou=people
根据环境的不同,USER_PRINCIPAL 还有可能需要设为 REMOTE_USER 等其它对应的值。
为 Cognos 应用启用安全性,并部署到 WAS 上图 9. Environment 参数配置
删除“ Cognos 8 “ ,位于 Environment --Cognos 8 service 下。
创建 EAR 包使用开发工具处理 EAR 包(实现 J2EE 安全性)
所有上述步骤完成后(LDAP、DB2、WAS),将 EAR 包导出。并部署在 WAS 上。
具体步骤为:
点击菜单上的 Action- Build Application File,选择 Cognos8,并点击下一步 ; 确保 EAR file 被选中,然后点击下一步 ; 最后点击 Finish.,将该 EAR 包导出。
找到刚才导出的 EAR 包,并导入到开发工具中,打开应用的 WEB 部署描述符,点击 Security 标签页。
图 10. WEB 部署描述符
增加一个安全角色,并命名为 security 。
图 11. Security 标签页
点击 Security Constraints 标签页,增加一个 Security Constraints,在 Display name 字段中输入 : security 。
图 12. 增加 Security Constraints
选择 (New Resource Collection) 条目,并点击编辑按钮,将该条目命令为 Security,并为 HTTP Methods 选择 GET、POST 。
增加 2 个 “ URL Patterns ”分别为:/servlet/dispatchs 以及 /servlet/dispatchs/*,点击 OK 。
图 13. Web Resource Collections
点击 Authorized Roles 区域下的编辑按钮,在 Description 字段中输入 Security 并选择下面的 security 条目,点击 OK 。
图 14. Authorization Constraint
点击 Servlets 标签页,并选择 Servlet and JSPs 下的 Dispatcher 条目。
图 15. Servlet and JSPs
点击 URL Mappings 下的增加按钮,增加如下两个映射;
/servlet/dispatchs /servlet/dispatchs/*
图 16. 增加映射
在 Security Role References 区域,点击增加;
图 17. 增加 Security Role References
在 Role name 字段输入 security 在 Role link 下拉框中选择 security 点击 OK 。
图 18. 增加 Security Role Ref 输入框
最后的结果应为下图所示:
图 19. 增加 Security Role Ref 结果
打开应用的应用部署描述符,注意与上述的 Web 部署描述符不同;
图 20. 打开应用部署描述符
将刚才增加的安全角色 security,搜集(Gather)到这里;
图 21. Gather
保存所有修改,并导出该 EAR 包。
部署 EAR 到 WAS 上图 22. 登录 Cognos dispatchs URL
图 23. 选择 Namespace
图 24. 登录进入 Cognos
此时已经登录进入 Cognos 。
图 25. 切换到 Websphere 自带的应用 snoop 校验
此时从 Snoop 的 User Principal 参数中可以看到 wpsadmin,说明 Cognos 的应用安全性已经成功实现。
Server1 与 Portal 统一 LTPA Token
从 Catalog 上下载 WebPage Portlet,并安装部署到门户中。该 Portlet 的作用,是直接利用 IFrame. 的方式将 Cognos 报表的链接嵌入到门户页面中减小展现。
进入 Cognos 报表系统,点击指定报表的属性按钮,从中找到该报表的 URL 。
图 26. 找到报表 URL
直接使用报表的 URL 作为 WebPage 的 URL 参数即可。
已实现 Shared Secret 方式单点登录(SSO)时
由于该方式仅在 Cognos 自带的 Portlet 实现,故若要直接利用该方式直接展现报表链接,还需利用 com.cognos.cps.auth.CPSTrustedSignon 扩展您的应用。
如果 Cognos 与 Portal 未实现单点登录,则需要动态的获取当前登录用户的用户名和密码,需要对 WebPage Portlet 进行补充完善。补充实现 WebSphere Portal 凭证槽的功能,以实现下面功能:
- 在 Portlet 中获取 Portal 认证用户及密码
- 利用该用户、密码结合报表 URL,组合成直接可以访问报表的链接。
本文为简单起见,略过凭证槽取密码的过程,读者可以参阅其它文章实现凭证槽的功能。
通过凭证槽取到密码后,将用户名、密码与 URL 采取如下方式组合:
http://hostname/cognos8/cgi-bin/cognos.cgi? 报表 URL&CAMUsername=用户名&CAMPassword=密码
新建 Portal 页面,并把已修正参数的 Webpage portlet 添加到页面中。
图 27. 效果图
先决条件,必须实现 Cognos 与 Portal 的 SSO
根据上述实现 SSO 的方法,首先实现 Cognos 与 Portal 的 SSO,才能使用该 Portlet 。
打开 Portal 首页,使用 wpsadmin 作为用户登陆,进入管理界面,选择 Web Modules 并且点击安装按钮,在 Cognos 目录中,找到 CognosBIPortlets_c82.war 这个包在 cpsibmportlets 下。
安装完成后,找到已安装的 War 包。点击 CognosBIPortlets_C82.war 的链接查看已安装的 portlets,点击编辑按钮,编辑 Cognos BI Content Portlets 的设置,根据实际环境输入适当的参数。
Cognos 与 Portal 所在的服务运行在同一个 WAS Profiles 上。甚至运行在同一个 server(process) 上。可直接利用 Shared Secret 方式实现的 SSO 进行配置。
cps_auth_namespace=cpstrusted Active Credential Type=HttpBasicAuth Cognos 8 WSRP WSDL Location= http://portal.ibm.com/cognos8/cgi-bin/cognos.cgi/wsrp/ cps4/portlets/nav?wsdl&b_action=cps.wsdl
cps_auth_secret=wpsadmin( 注意该值与前面使用 Shared Secret 实现 SSO 中第 4 步配置的 Shared Secret 的值一致 )
Shared Secret 方式图 28. Cognos portlet 配置
LtpaToken 方式在 Portal 页面中部署 Portlet
若 Cognos 所在的 WAS Server 和 Portal 所在的 WAS Server 不是同一个 was profiles,则必须统一两个 Server 的 LtpaToken 。
此时,Cognos Portlet 可配置如下:
Active Credential Type=LtpaToken Cognos 8 WSRP WSDL Location= http://portal.ibm.com/cognos8/cgi-bin/cognos.cgi/wsrp/ cps4/portlets/nav?wsdl&b_action=cps.wsdl
这里 Cognos 8 WSRP WSDL Location 还可以用 http://portal.ibm.com:10000/ p2pd/servlet/dispatchs/wsrp/cps4/portlets/nav?wsdl&b_action=cps.wsdl,但在之前 SSO 的设置中,需要做一些调整。注意这中间的差别。
这个 WSDL 参数中用到的链接,在 Portal 与 Cognos 实现 SSO 步骤中必须成功,否则 Portlet 不可用。
选择 Cognos Portlet 中的 portlet(Navigator portlet、Search Portlet、Viewer Portlet、Extend Application Portlet),并部署到页面中。
自带 Cognos Portlet 提供的功能 ( 效果图 )
Cognos 报表搜索器图 30. Cognos 报表搜索器
Cognos 报表浏览器图 31. Cognos 报表浏览器
Cognos 扩展应用商业智能构建器让您的 Cognos 得到更广泛的应用。
若实现扩展应用的功能,本文所写的内容仅是必要条件,但还需进行其它配置,请参考 Cognos 自带的帮助。速定制开发 Cognos Portlet
若现成的 Portlet 不能满足需求,则需要自己定制开发 Cognos Portlet 。
仪表盘加速器开发工具 WebSphere Dashboard6.1 提供
</A />Dashboard6.1 提供现成的 Cognos 组件 Cognos Builder图 32. Cognos Builder
预置的组件使得 WebSphere SOA 工具能够将 BI 信息做为服务管理特性向下钻取构建器更方便更彻底的访问 Cognos 的报表、数据。
无需 Java 开发,通过 RAD 工具构建应用来获取和重用 BI 数据,使 BI 系统中的数据可以继承 WebSphere Dashboard 的“可操作”特性。
- 开发人员确定用户在运行期间需要选择哪些报告和参数
- 用于在仪表盘中展示的数据可以是 XML,或者由其他构建器运算或者其他方式生成
- 减少登录在运行期间能够自动指定信任状和认证方法的能力
将来自各方数据源的数据生成用户图表,用户可以通过图表数据进行向上或者向下钻取,更详细的信息,可以访问 Dashboard6.1 的相关链接。
提供灵活的报表配置功能,并有很多可选的报表定制项。
可以非常方便的通过各种条件查找报表。
提供报表导航功能,可以方便的查看浏览报表。
最后将 Portal 与 Cognos 所在的 WAS 的 LTPA 的 key 统一起来(即,将 Portal 的 LTPA 的 key 导出来,导入到 WAS 中即可,反之亦然),SSO 即已实现。
增加环境变量,把 Cognos/bin 加入到 WAS 的 PATH 变量中;安装 EAR 包,并绑定安全设定。通过以下方式进行验证,
若不打算使用 LTPA 方式实现 SSO,本步骤可以不做,但为了获取更高的性能,以及更好的可扩展性,强烈建议把 Cognos 配置在 WAS 上运行。
运行 CogConfig(注意先在 was 下运行 setupcmdline),进入 Environment 部分,修改所有的端口号为 9300 的部分为 WebSphere AppServer Server 的 Server1 使用的端口号 10000,并注意修改正确的主机名。