级别: 初级 Bruno Charpentier (charpentier.b@fr.ibm.com), 软件工程师, IBM Paris Lab
2006 年 4 月 20 日 服务组件体系结构(Service Component Architecture,SCA)允许您根据基础传输进行抽象,以便定义策略和服务质量(Quality Of Service,QoS),而无需编写服务实现代码或对其进行更改。用于在 SCA 组件上定义 J2EE 角色的两个 QoS 限定符分别与安全权限和安全标识相关。本文描述如何使用 WebSphere® Integration Developer 在 SCA 组件上定义安全权限和安全标识。
引言
在当前的 SCA 组装模型规范文档中(请参阅参考资料部分),QoS 并不是规范的主要组成部分,而仅在附录中对其进行了定义。它列出了三个域的标准 SCA 策略元素和属性:安全、事务和可靠消息传递。
WebSphere Process Server 和 WebSphere Integration Developer 一起提供了这些域的一个实现。对打包为 SCA 模块的 SCA 组件进行连接时,可以指定 QoS 限定符。这些限定符可为 SCA 组件提供服务质量保证,同时也为这些组件的客户端提供了服务质量保证。可以在三个级别定义限定符:
有关不同 SCA 元素以及这三个级别的概述,请参阅 Building SOA solutions with the Service Component Architecture -- Part 1。
根据限定符具体情况,定义可能在特定的级别不可用。安全限定符只能在以下两个级别定义:
-
接口:在此级别,可以定义 SCA 组件的安全权限。允许定义 J2EE 角色,因此只有与此角色关联的客户端才被授权调用组件。
-
实现:在此级别,可以定义 SCA 组件的安全标识。允许定义组件标识,与为 Enterprise Java Bean (EJB) 定义委托策略(也称为 Run-As 模式映射)的方式相似。它允许将组件的所有方法作为特定安全角色的成员运行。
所有限定符都在服务组件定义语言(Service Component Definition Language,SCDL)文件的特定部分定义,此文件用于定义 SCA 组件的接口、实现和服务质量要求。
现在我们将演示一个使用 WebSphere Integration Developer 开发的简单示例,从而说明如何在 SCA 组件上定义安全限定符。本文所使用的 WebSphere Integration Developer 版本为 6.0.1。
关于示例应用程序
由于我们希望将重点放在 SCA 组件的安全实现上,因此将不会从头逐步对示例进行说明。我们将使用的示例来自 Building SOA solutions with the Service Component Architecture -- Part 1。
您将把一个项目交换文件导入到 WebSphere Integration Developer 中,该文件中包含一个预先构建的示例,此示例由具有一个 SCA 组件的 SCA 模块、此组件的 Java 实现和调用它的 JSP 测试页组成。还包含了一个基于表单的登录页,以允许登录到该示例。
图 1 显示了 CreditApprovalSCAModule SCA 模块的组成情况,其中包含 CreditApproval SCA 组件和一个独立的引用(因为 CreditApproval 由 JSP——非 SCA 组件进行调用)。
图 1. CreditApprovalSCAModule SCA 模块
导入示例
首先,需要下载示例,并将其导入到 WebSphere Integration Developer 工作区。
-
将本文所包括的项目交换文件下载到您的硬盘。项目交换文件是压缩归档文件,其中包含所有源项目(包括 SCA 模块)。
-
在 WebSphere Integration Developer 中打开一个空白工作区,并关闭欢迎屏幕。Workbench 应在 Business Integration 透视图中打开。
-
要导入项目交换文件,请右键单击 Business Integration 视图并选择 Import。
-
选择 Project Interchange,然后选择 Next。
-
浏览到下载的文件,然后单击 Select All 和 Finish。如果在 Problems 选项卡中看到错误,请单击 Project 菜单,然后单击 Build Automatically 取消选中,然后单击 Build All,从而重新构建项目。
-
展开 CreditApprovalSCAModule 模块(图 2)。
图 2. 展开的 CreditApprovalSCAModule
-
请对 CreditApproval SCA 组件的 CreditApproval 接口和 CreditApprovalImpl Java 实现加以注意。
定义安全角色
接下来,我们将定义安全角色。安全角色是具有安全资源(如 Servlet、JSP、EJB 或 SCA 组件)及方法的访问权限的命名用户集。在示例中,我们希望保护的资源是调用 SCA 组件的 JSP 和 SCA 组件本身。角色将在应用程序部署时映射到实际的用户和组(在称为安全角色映射 的过程期间进行)。
对于我们的示例,安全角色已经在导入的项目交换文件中进行了定义。
为了便于使用,我们经常使用 J2EE 透视图。对于某些产品许可证,此透视图可能不可用。如果看不到此透视图,可以向 Business Integration 透视图添加 Navigator 视图,但无法使用部署描述符编辑器。
-
从 Window 菜单中选择 Preferences。
-
展开 Workbench,并单击 Capabilities。
-
选中 Advanced J2EE,然后单击 OK。
-
从 Window 菜单中选择 Open Perspective - Other...
-
选择 J2EE,然后单击 OK。
-
在 Project Explorer 视图中,依次展开 Dynamic Web Projects、CreditApprovalClient 项目和 WebContent(图 3)。
图 3. CreditApprovalClient 内容
包含调用 SCA 组件的 JSP (creditApprovalClient.jsp) 和基于表单的登录页 (login.html) 的 Web 项目。
-
双击 CreditApprovalClient Web 项目的部署描述符,并检查 Security 选项卡的内容(图 4)。
定义了三个角色(manager、nonManager 和 delegate)。JSP 上还有一个访问安全约束。映射到其中一个角色的所有用户都被授予了访问该 JSP 的权限。
图 4. Security 选项卡
在 SCA 组件上定义安全权限
接下来,我们将定义 CreditApproval SCA 组件的安全权限。将只授权具有 manager 角色的用户访问 SCA 组件。
-
返回 Business Integration 透视图。
-
双击 CreditApprovalSCAModule 模块。
-
单击 CreditApproval 组件。
-
转到 Properties 视图,单击 Details 并切换到 Qualifiers 选项卡。
将会选择 Interfaces 项。可以将所有接口限定符应用到组件的三个级别:
操作的限定符将覆盖接口的限定符,而接口的限定符将覆盖组件的所有接口的限定符。我们此处仅有一个操作和一个接口,因此可以在任何级别定义限定符。
-
单击 Add 按钮,以显示可用的服务质量。
-
选择 Security permission 并单击 OK。
-
选择 Security permission 限定符,并在 Role 字段中输入 manager(图 5)。
图 5. Qualifiers 选项卡
-
保存并关闭模块。
定义安全角色映射
接下来,我们需要将用户映射到我们定义的 manager nonManager 和 delegate 角色。我们将在企业应用程序的部署描述符中定义此映射。我们的文件包含预定义的映射,因此需要使用自己的用户代码替换原有的用户代码。
-
返回 J2EE 透视图。
-
在 Project Explorer 视图中,展开 Enterprise Applications 和 CreditApprovalSCAModuleApp 应用程序。
-
双击 CreditApprovalSCAModuleApp 部署描述符,并切换到 Security 选项卡。
-
选择 manager 角色(图 6)。
图 6. 企业应用程序的 Security 选项卡
-
选择 bcp 用户,单击 Edit... 按钮,并使用您操作系统的有效用户替换其中的值。
-
采用相同的方式将 db2admin 用户映射到 nonManager 角色,将 bruno 用户映射到 delegate 角色。
-
保存并关闭编辑器。
在 WebSphere Process Server 上设置全局安全性
我们将使用 WebSphere Process Server Test Environment 来测试示例。您需要使用管理控制台设置安全性,并修改在 Test Environment 安装期间设置的一些缺省参数。在此示例中,我们将配置与本地操作系统用户注册表一起使用的安全设置。当然,也可以使用自定义注册表或 LDAP。
-
切换到 J2EE 透视图。
-
在 Servers 选项卡上右键单击 WebSphere Process Server 并选择 Start。
-
服务器启动后,右键单击该服务器并选择 Run administrative console。
修改 J2C 身份验证数据
在测试环境的安装期间,一些 J2C 身份验证数据项是使用缺省用户创建的。您需要将其修改为您的有效用户,特别是 SCA 用于登录到受保护的 SIBus 的别名。
-
登录,展开 Security 项,并选择 Global security。
-
在 Authentication 项中展开 Jaas Configuration 并单击 J2C Authentication data。
-
必须更改所有包含 wid 用户的别名,将其替换为您的用户(图 7)。
图 7. J2C 身份验证数据项
设置全局安全性
-
修改了所有项后,返回到 Global security 面板。
-
选中 Enable global security 属性,并取消选中 Enforce Java 2 security 属性,然后单击 OK。
-
在 Local OS user registry 面板上输入有效的用户和密码,然后单击 OK。
-
保存更改,从管理控制台注销,并停止服务器。
修改服务器配置
-
在 Servers 选项卡上双击服务器。
-
展开 Security,选中 Security is enabled on this server 并输入有效的用户和密码。
-
在 Server connection type and admin port 面板上选择 SOAP,以确保服务器正确启动(图 8)。
图 8. 服务器配置
-
保存并关闭编辑器。
测试安全权限
-
右键单击服务器,并选择 Start。
-
服务器启动时,右键单击该服务器并选择 Add and remove projects...。
-
从列表中选择 CreditApprovalSCAModuleApp 应用程序,并单击 Add 按钮。单击 Finish,等待部署完成。
-
展开 Dynamic Web Projects、CreditApprovalClient 和 Webcontent。
-
右键单击 creditApprovalClient.jsp 并选择 Run - Run on Server...
-
选择 WebSphere Process Server 并单击 Finish。
-
将随即显示登录页面。输入具有 manager 角色的用户代码及密码(图 9)。
图 9. 登录页
-
在下一页的 First Name 和 Last Name 字段中输入有效值,在 Customer Id 字段中输入 1,然后单击 SubmitCreditApp 按钮。
-
由于 SCA 组件授权给具有 manager 角色的用户,因此页面上将显示信用查询结果(图 10)。
图 10. 结果页
-
现在已经成功连接了,接下来请关闭浏览器,重新启动服务器并运行 creditApprovalClient.jsp,但这次使用 nonManager 类用户登录。
-
对于此用户,未授权访问 SCA 组件,因此将显示一条错误消息。
在示例中,SCA 服务运行时引发的异常将由 JSP 捕获,并在页面上显示相应的异常消息(图 11)。
图 11. 访问未授权
-
关闭 Web 浏览器并停止服务器。
定义安全标识
SCA 组件的安全标识与 EJB run-as 委托策略相似。即,SCA 组件的实现代码将使用调用方标识执行。在我们的示例中,调用方是 JSP 页。如果观察一下结果页(图 10),您会注意到显示的是 Run-As user,即执行 SCA 组件的 Java 实现代码 (CreditApprovalImpl.java) 的用户。
但可以修改此缺省行为,而将组件的所有方法委托为作为特定安全角色的成员运行。要在 SCA 组件的实现级别定义此特定角色。
此后,必须在部署期间分配一个是指定的安全角色的成员的实际用户。
要获取 Java 实现中的 Run-As 用户代码,请使用 JAAS Subject 和用户经过 WebSphere Process Server 身份验证时创建的公共凭据。清单 1 显示了用于检索 Run-As 用户的 Java 代码。
清单 1. 获取 Run-As 用户
try {
WSCredentialImpl pubCred = null;
Subject sujetWS = WSSubject.getRunAsSubject();
Set set = sujetWS.getPublicCredentials();
if (!set.isEmpty()) {
pubCred = (WSCredentialImpl) set.iterator().next();
}
creditRating.setString("customerId", creditApplication
.getString("customerId")
+ " Run-As user : " + pubCred.getSecurityName());
} catch (Exception e) {
}
|
在实现级别定义安全标识
-
在 Business Integration 透视图中双击 CreditApprovalSCAModule 模块。
-
单击 CreditApproval 组件。
-
转到 Properties 视图,单击 Impementation 并切换到 Qualifiers 选项卡。
-
单击 Add 按钮,以显示可用的服务质量。
-
选择 Security identity 并单击 OK。
-
选择 Security identity 限定符,并在 Privilege 字段中输入 delegate(图 12)。
图 12. 安全标识
-
保存并关闭模块。
要使用 SCDL 来定义安全权限和标识。SCDL 定义存储在多个文件中,但安全元素和接口及实现定义一起存储在名为 CreditApplication.component 的文件中。
要 Business Integration 透视图中检查此文件的内容(图 13),请从 Window 菜单中选择 Show View - Physical Resources。展开 CreditApprovalSCAModule。
图 13. SCDL 定义
将用户分配给安全标识
用户只能在部署时使用管理控制台映射到安全标识。对于当前的版本,为了完成此工作,必须从 Ear 文件部署应用程序。
-
切换到 J2EE 透视图。
-
从 File 菜单中选择 Export...。选择 EAR file 并单击 Next 按钮。
-
选择 CreditApprovalSCAModuleApp EAR 项目和一个目标文件。单击 Finish。
-
在 Servers 选项卡上,启动 WebSphere Process Server。
-
右键单击 WebSphere Process Server 并选择 Run administrative console。
-
登录,然后在 Applications 项中选择 Enterprise Applications。
-
选择 CreditApprovalSCAModuleApp 并单击 Stop。
-
选择 CreditApprovalSCAModuleApp 并单击 Uninstall。单击 OK。
-
单击 Install,然后单击 Browse 按钮。选择之前保存的 Ear 文件,并单击 Next,然后再单击 Next。
-
单击 Step 7: Map RunAs roles to users。
-
选中 delegate 角色,并输入映射到委托角色的用户代码和密码。单击 Apply(图 14)。
图 14. Map RunAs roles to users
-
单击 Next,然后单击 Next 和 Finish。
-
保存到主配置。如果出现保存冲突,请为所有项选择 Overwrite。
-
从 Applications 菜单中选择 SCA modules。
-
选择 CreditApprovalSCAModule 并单击 Start。
测试安全标识
-
在 J2EE 透视图中依次展开 Dynamic Web Projects、CreditApprovalClient、Webcontent。
-
右键单击 creditApprovalClient.jsp 并选择 Run - Run on Server...
-
选择 WebSphere Process Server 并单击 Finish。
-
将随即显示登录页面。输入具有 manager 角色的用户代码及密码。
-
在下一页的 First Name 和 Last Name 字段中输入值,在 Customer Id 字段中输入 1,然后单击相应按钮
-
页面上将显示具有 delegate 角色的用户为 Run-As 用户(图 15)。请注意,可以为安全标识选择未授权访问 SCA 组件的角色。
图 15. RunAs 结果页
结束语
服务质量是 SCA 的一项重要特性,而安全又属于可用于的 QoS 限定符的一部分。本文介绍了 SCA 组件的两个安全限定符(安全权限和安全标识),并讨论了可以如何使用 WebSphere Integration Developer 6.0.1 定义和使用这些限定符。
致谢
感谢 Jeff Brent 和 Kevin Griffith 对本文档进行了技术审阅。
下载 | 描述 | 名字 | 大小 | 下载方法 |
|---|
| Sample SCA application | creditapproval.zip | 29KB |
FTP | HTTP |
|---|
参考资料 学习
获得产品和技术
- 使用 IBM 试用软件开发您的下一个项目,可直接从 developerWorks 下载这些试用软件。
关于作者  | 
|  | Bruno Charpentier 是 IBM ISSW Paris Lab 的一位软件工程师。他长期以来一直将工作重点放在 WebSphere Business Integration Server Foundation 与 WebSphere Process Server、WebSphere security 及 DB2 内部的业务集成上。他负责帮助欧洲的客户对 IBM 产品和技术进行集成。 |
对本文的评价
|