利用 Geronimo 2.2 创建安全的 Web Service 应用
简介:?随着 Web Service 应用越来越广泛, 如何保证服务能够安全的访问和传输,也逐渐引起开发人员和用户的关注。Web Service 的安全可以从两方面考虑:访问安全和传输安全 .。前者主要指只有授权用户可以访问应用, 而后者侧重于在消息传输过程中如何保证消息的私密性和完整性。本文介绍了如何在 Apache Geronimo 开发和部署安全的 Web Service 应用,以确保信息交互的安全,将侧重介绍如何基于 HTTP/HTTPS 协议保护 Web Service 应用访问和传输的安全。
?
目前为止,示例中的 Web Service 应用没有任何安全设置,任何客户端均可以直接访问。 在后续的章节中,我们将基于该示例展示在 Apache Geronimo 中如何使用各种安全策略来确保 Web Service 应用的安全,包括授权访问和传输安全。
?
在 清单 5中设置了对访问路径 /bookstore 的任何 GET 和 POST 请求都需要使用 HTTP BASIC 认证方式,允许访问的角色为 admin。而在 清单 6中,指定了执行认证的安全域,出于示例方便。我们直接使用了 Geronimo 自带的 geronimo-admin 作为指定安全域,,用户完全可以定义和部署自己的安全域,同时将角色 admin 映射为安全域中的 admin 组,即当登录用户隶属于 admin 组时,其将具备对受保护资源的访问权限。 当重新部署之后, 此时再通过浏览器访问 http://localhost:8080/SecurityWebServices/bookstore?WSDL, 会提示输入用户名和密码。如 图片 3所示。
图片 3. BookStoreImplService 访问页面
接下来,我们对 Web 客户端进行修改,使其可以访问受 HTTP BASIC 认证方式保护的 Web Service 应用。 在 JAX-WS 的 API 中, 可以通过 BindingProvider
接口来设置认证所需的用户名和密码。 请参照 清单 7,出于示例方便, 用户名和密码采取硬编码的方式, 实际使用时可以采取更灵活的方式。
清单 7. BookStoreClient 代码片段
?
在 清单 8中,我们为当前服务器默认使用的安全域的登录链添加一个新的 LoginModule GeronimoPropertiesFileMappedPasswordCredentialLoginModule
, 此模块的作用是当用户使用其所在的安全域进行认证时,会将在 simple-credentials.properties 配置文件中对应的用户名和密码信息对添加到 Subject
中的 Private Credentials 中去。以属性文件中第一行的内容为例,system=system:system=manager,第一个 system 对应于当前登录所使用的用户名,第二个 system 为登录信息的名称,最后的 system 和 manager 则为真正使用的用户名密码信息。后续会介绍 Geronimo 如何使用保存在 Subject 中的 Private Credentials 信息为 Web Service 的访问提供平台级别支持。
?
清单 9. geronimo-web.xml 片段
从表格 3的设置可以看出,Web Service 客户端和服务端设置是完全对等的,只是客户端是通过系统属性设置,而服务端则通过 HTTPS Connector 设置。也说明了 CLIENT-CERT 本质上是双向证书认证方式。
结束语
本文以一个简单的在线书店 Web Service 应用为例,介绍了如何基于 HTTP/HTTPS 保护 SOAP 信息交互安全。概而述之,通过 HTTP BASIC/CLIENT-CERT 实现对 Web Service 应用的授权访问,而通过 SSL 确保消息传输的完整性和私密性。实际环境中,可以基于需求选择合适的安全策略。
?
原文:http://www.ibm.com/developerworks/cn/opensource/os-cn-ag-secwebs/index.html?ca=drs-