IBM WebSphere sMash 服务器,基于著名的 Project Zero 项目(见 参考资料)而建立,通过确保各种角色的安全和保护资源来实现认证和授权模块。IBM WebSphere sMash 服务器确保您的源代码或资源受限制访问保护。您可以控制访问的用户或组。因为安全性是 IBM WebSphere sMash 的一个特性,您没有必要添加依赖项 — 只需要启动配置文件中的安全性。IBM WebSphere sMash 验证使用 Java™ Authentication and Authorization Service (JAAS) 实现安全模块。
在本文中,学习如何在 IBM WebSphere sMash 中使用安全模块。通过示例探讨如何调整安全特性来满足您的特定需求。
我们曾在 sMashing 您的应用程序 一文中创建过一个可下载的应用程序 onlineLibrarySimulation。这个应用程序使用其自身的逻辑和代码进行授权和验证来授权访问。
在本文中,利用 IBM WebSphere sMash 服务器的内部安全模块可以实现同样的效果,但是在授权上有更好的处理。您将在 zero.config 文件(WebSphere sMash 服务器的主配置文件)中使用编辑和添加属性。
深入探讨安全模块之前,本小节将介绍一些关于用于保护您的应用程序或资源的流程的基础知识。
Authentication(认证) 是确保将要访问资源的用户或组是被许可的(或者是该资源的一个有效用户或组)。
Authorization(授权) 是给一个用户或组访问资源的特定权限。
Accounting 是一个用户或组访问的记录或日志。
本文重点探讨基础认证和基于表单的认证。IBM WebSphere sMash 服务器可以实现以下类型的认证:
- 基础认证
- 基础认证模式假设客户将提供将要访问的每个领域的认证证书。更多信息见 参考资料。
- 基于表单的认证
- 基于表单的认证主要是针对基于 web 的应用程序。它为客户提供一个登录表单来输入证书,从而验证用户。
- 单点登录
- 单点登录是一种方法,在企业内部用户输入同一个登录证书就可以登录或访问多个应用程序。
- 可编程登录
- 应用程序创建自己的登录模块,用来进行认证。
更多信息参阅 WebSphere sMash 文档(见 参考资料)。
每个 IBM WebSphere sMash 应用程序都有一个 zero.config 文件 — 该文件是应用程序的 “大脑”。多数应用程序相关的配置都是由这个文件决定和配置的。
- 在您的 Appbuilder 中打开 zero.config 文件。
有一个单独的文件 security.config,这是一个好的编程习惯,它包含所有安全性相关的配置。这将向应用程序添加模块性,根据类别隔离配置。
为此您将创建另一个文件,并将其包含在 zero.config 文件中,如下所示。
清单 1. 在 zero.config 中包含 security.config# Include the security configuration file @include"security.config"
- 创建一个名为 security.config 的新文件。要增强安全性,第一步是使用下列代码启动。
清单 2. 启用安全性:security.config# Enable Security @include"security/enableSecurity.config"
在示例应用程序中,安全性将被设置为
on。当应用程序启用安全性时,IBM WebSphere sMash 服务器将在客户端存储一些关于验证用户的信息。此信息是保密的,因此需要对其进行加密。为了加密该信息,IBM WebSphere sMash 使用了一个加密字符串作为密钥,这可通过 Command Line Interface (CLI) 命令生成。 - 要生成应用程序密钥,您必须位于应用程序目录中。清单 3 展示了一个示例。
清单 3. 生成secretkeycd onlineLibrarySimulation zero secretkey CWPZC2031I: Result BzlB6HMtLqQfCSq9t/2pbA==
每次 当您执行
zero secretkey命令时,它将生成一个不同的密钥。您的命令生成的密钥可能不同于这里生成的样例密钥。这个密钥一旦生成,示例将用它作为 security.config 文件中的一个属性。 - 添加以下代码来在文件中设置密钥。
清单 4. 包括密钥:security.config# Secret Key /config/security/secretKey="BzlB6HMtLqQfCSq9t/2pbA=="
WebSphere sMash 服务器使用以下用户服务类型:
- 基于文件的用户服务
- 一个基于文本文件的用户服务
- LDAP
- 使用 Lightweight Directory Access Protocol (LDAP) 服务器作为一个用户服务
- 扩展
- 当 LDAP 和基于文件的用户服务都不提供所需功能时,WebSphere sMash 提供一个扩展。
本文介绍基于文件的用户服务和 LDAP 用户服务。
WebSphere sMash 默认使用基于文件的用户服务。它使用一个文件 zero.users,其中含有用户可以访问的应用程序或者对用户有效的应用程序。
对于这个示例应用程序,要在 zero.users 中创建一个用户或组,进入应用程序目录,然后发出命令 zero user,如清单 5 所示。这个用户添加的标识符将被启动。
清单 5. 创建用户/组:zero.users
cd onlineLibrarySimulation
zero user
CWPZC2114I: Entering interactive mode.
CWPZC2126I: Enter location of user file:
[Press enter to use default of ./config/zero.users]:
CWPZC2120I: Type 'create' to create user, 'update' to update user or 'exit' when done.
create
CWPZC2121I: Creating new user.
CWPZC2127I: Enter username:
natasha
CWPZC2128I: Enter password:
xxxxx
CWPZC2129I: Enter group (or enter when done):
Admin
CWPZC2129I: Enter group (or enter when done):
CWPZC2115I: User 'natasha' was successfully added to the user file.
CWPZC2120I: Type 'create' to create user, 'update' to update user or 'exit' when done.
exit
CWPZC2119I: The interactive mode of the user service command successfully terminated.
|
输出显示用户 natasha 已成功添加到文件 zero.users。清单 6 显示了一段 zero.users 内容。密码显然是经过加密的。
清单 6. zero.users
natasha:c2702813148331721942c852a45b86e0:Admin
|
带有一个加密密码的用户 natasha 已添加到 Admin 组了。用户访问应用程序将根据这个文件进行验证。您可以为该文件添加多个用户。
要启动基础验证,需要将下列代码添加到 security.config 文件中。清单 7 中的配置确保资源或应用程序受到保护,且需要验证。
清单 7. 包含基本验证:security.config
# Basic Authentication for our directory/methods
@include "security/basicAuthentication.config"
{
"conditions": "(/request/path =~ /path_to_resources (/.*)?)"
}
|
清单 8 显示了如何包含应用程序授权。代码仅供 natasha — Admin 组的成员之一 — 访问 /path_to_resources(/.*)?。
清单 8. 通过基于文件的用户服务定义授权
@include "security/authorization.config"{
"conditions": "(/request/path =~ /path_to_resources(/.*)?)",
"users" : ["natasha"] ,
"groups" :["Admin"]
}
|
当应用程序被访问时,IBM WebSphere sMash(启用基础验证的)将展示一个登录页面。用户需要通过输入他们的登录证书来进行认证(在本例中,用户 natasha/welcometoIBM)。您也可以通过包含清单 9 中所示的 security.config 文件的代码来为验证弹出域重命名。
清单 9. 设置域:security.config
# The realm
/config/security/realm="IIP Authentication for Online Simulation"
|
图 1 显示了登录表单。
图 1. 基于文件的基础认证的认证
认证成功,您现在可以访问应用程序了。如果认证不成功,用户将获得一个 401 – Unauthorized Access 错误。
使用一个文本文件(/config/zero.users)的用户服务基础认证配置现在完成了。记住,每次 只要您在配置文件中做了一个更改,IBM WebSphere sMash 服务器就需要重启 。
清单 7 中的配置不包含任何关于认证方法的细节。默认基于文件的用户服务被激活。
在下列清单 10 的配置中,第一行通知 IBM WebSphere sMashIn 服务器,它使用 LDAP 用户服务进行认证。然后继续进行 LDAP 相关的配置。配置需要使用您的服务器名称等进行定制。
清单 10. 通过 LDAP 进行认证:security.config
# LDAP Specific information for Authentication
/config/security/userservice/registryType="ldap"
/config/security/userservice/ldap += {
"jndiProviderUrl" : "Your LDAP Server",
"jndiSecurityAuthentication" : "simple",
"ldapSearchScope" : 2,
"ldapUserIdSearchFilterPattern" : "(&(mail={0})(objectclass=ibmPerson))",
"ldapUserIdBaseDn" : "ou=ldappages,o=<domain>.com",
"ldapGroupBaseDn" : "ou=memberlist, ou=<Group Name>,o=ibm.com",
"ldapUserIdAttributeType": "mail"
}
|
要提高或增强应用程序的安全性,您可以在 LDAP 服务器上建立一个组,仅供该组成员使用。这类似于为基于文件的用户服务创建的 Admin 组,只是该组是 LDAP 上已有的。
清单 11 中的代码授权用户使用应用程序(非常类似于 清单 8)。
清单 11. 通过 LDAP 用户服务定义授权:security.config
#uses group discovered through LDAP authentication.
@include "security/basicAuthentication.config"{
"conditions": "(/request/path =~ /resources/system(/.*)?) && (/request/method =~
(POST|GET|PUT|DELETE)) ",
"groups" :["Simulation-Group"]
}
# The realm <OPTIONAL>
/config/security/realm="IIP Authentication for Online Simulation - using LDAP"
|
一旦您重启了服务器,用户将根据 LDAP 进行认证。
图 2 显示了浏览器生成的认证界面,在用户访问应用程序时弹出。
图 2. 基于 LDAP 的基础认证的认证
基础认证有一些缺点,最理想的情况是只在开发环境中使用。在生产环境中不能使用基础认证的一个原因是用户的用户名和密码不能被加密只能编码,而且对于每一个事物都需要将它们发送到服务器端。证书可能被拦截,在用户修改密码之前它们都有效。最大的缺点是如果您关闭浏览器并重启的话,基础认证只记录您的退出。
基于表单的认证是一个过程,应用程序所有者以此来创建自己的登录表单(而不是使用浏览器提供的那个)。就配置而言,基于表单的认证类似于基础认证,除了您将 IBM WebSphere sMash 服务器指向自定义的登录页面。
在 /public 文件夹下创建一个名为 login.html 的登录页面。清单 12 显示了 login.html 所需的样例代码。
清单 12. login.html
<form method="POST" action="" name="frmLogin"> <table border ="1" align="center" width="100%"> <tr> <td> <label>Username:</label> </td> <td> <input type="text" name="zeroUserName" id="zeroUserName"> </td> </tr> <tr> <td> <label>Password:</label> </td> <td> <input type="password" name="zeroPassword" id="zeroPassword"> </td> </tr> <tr> <td colspan="2"> <input type="submit" value="Submit" name="submit" id="submit"/> </td> </tr> </table> </form> </body> </html> |
创建自定义表单时有几点约束:
- 用户名字段和密码字段必须分别被命名为
zeroUserName和zeroPassword。 <form>方法必须是POST。
和基础认证一样,基于表单的认证也有 3 个认证方法。清单 13 显示的是基于认证的基于文件的用户服务。
清单 13. 基于文件的用户基于表单的认证服务的 security.config 文件
@include"security/formLoginURL.config"{
"formLoginPage":"/login.html"
}
|
上述代码告知 IBM WebSphere sMash 服务器登录页面在 /public 下可以找到且被 login.html 所调用。我们本质上将其指向自定义的登录表单。
其余的配置保持不变,除了一节之外。
清单 14. 基于文件的用户基于保单的认证服务的 security.config 文件(续)
@include"security/formAuthentication.config"
{
"conditions": "(/request/path =~ /path_to_resources(/.*)?)"
}
@include"security/authorization.config"{
"conditions": "(/request/path =~ /path_to_resources(/.*)?)",
"users" : ["natasha"] ,
"groups" :["Admin"]
}
|
如清单 14 所述,只有配置的第一节发生了变化 — 正好是认证的类型。其他一切都将保持不变。
图 3. 自定义的登录表单
当您尝试访问应用程序时,IBM WebSphere sMash 服务器将浏览器重定向到我们预定义的自定义登录页面。当您输入正确证书时(natasha/welcometoIBM)显示主页面,否则显示一个错误。
使用一个文本文件(/config/zero.users)用户服务进行基于表单的认证配置这就完成了。作为一个独立实践,您可以尝试使用 LDAP 作为一个用户注册表进行基于表单的认证。步骤是相同的,如 清单 10 所述。
使用 Secure Socket Layer (SSL) 保护应用程序的安全性
保护您的应用程序的安全是一个好主意,但是您也需要保护您用于认证的信息。假设您的应用程序使用的是基于表单认证。当用户攻击您的应用程序时,他们必须输入用户名和密码,这由一个文本或者 LDAP 检查。但是当信息从您的应用程序传递到服务器时,信息就不再安全了。您甚至需要保护登录页面,确保服务器是绝对安全的。您可以通过使用 Secure Socket Layer (SSL) 增强安全性。
在 IBM WebSphere sMash 服务器上实际配置 SSL 之前,我们先来简单学习一下 SSL 的工作方式。以下是本文后半部分所要用到的 SSL 术语:
- KeyStore
- 该文件包含公钥和私钥。公钥被作为签名者的证书存储并发送到需要它们的客户端。当您配置一个应用程序使用 HTTPS 接受请求时,您必须定义一个密钥存储。这个密钥存储必须包含一个私钥,当协商一个来自客户端的 HTTPS 连接时,应用程序需要使用那个密钥。
- TrustStore
- 这个文件包含公钥,作为来自您认为值得信任的目标服务器的签名者证书存储。
- 创建一个 TrustStore
- 从服务器 KeyStore 中提取公钥,并将它添加到 TrustStore 作为一个签名者证书。
- SSL 证书
- 在 SSL 认证期间从服务器端发送到客户端来确认服务器的身份。
当客户通过 https:// URL 访问这个应用程序时,SSL 在服务器端生效,使用以下步骤:
- 服务器从其 keyStore 中向客户端发送一个公钥和证书。
- 客户端浏览器确定是否证书是被一个可信第三方授权发布的,或者它是否仍然有效以及是否和相关网站有关联。
- 如果是,那么客户可以使用公钥来加密
random symmetric encryption key然后将它以及所需的加密 URL 和其他加密的 HTTP 数据发送到服务器。 - 服务器使用其私钥解密对称的加密密钥,然后使用对称密钥解密 URL 和 HTTP 数据。
- 服务器传回所请求的那些使用对称密钥加密的 HTML 文档和 HTTP 数据。
- 客户端使用对称密钥加密 HTTP 数据和 HTML 文档,然后显示信息。
本小节讨论在服务器上配置 SSL 的几个简要场景。
第一个场景是一个运行在一个应用程序上的 IBM WebSphere sMash 服务器实例。在这种情况下,您需要保护客户端和服务器之间的通信安全。
打开 zero.config 文件。或者您可以创建您自己的文件(比如 ssl.config),将其包含在 zero.config 文件中,然后添加清单 15 中的信息。
清单 15. 编辑 zero.config 来启动 SSL
/config/https/port = 8085
/config/https/sslconfig = {
"keyStore": "./config/mykey.jks",
"keyStorePassword": "wrapper",
"keyStoreType": "JKS"
}
|
清单 15 的第一行声明了个 HTTPS 端口(SSL 上的 HTTP)。这个端口必须不同于您常用的 HTTP 端口。清单 15 的其他代码阐述了 SSL 配置:keyStore 文件名、密码和类型。这些是一个 SSL 配置所需的强制性参数。Password 可以通过 zero 目录编码,且可以以更安全的方式处理(与明文不同)。清单 16 展示了密码的编码方法。
清单 16. 使用
zero encode 编码密码zero encode wrapper CWPZC2029I: Input mypassw0rd CWPZC2030I: Result <xor>KC0+Ly86LQ== |
当客户端或浏览器使用 HTTPS 访问 URL 时,登录页面立即消失。传递到服务器用于认证的登录证书将使用 SSL 保护安全。
接下来的场景是保护两个应用程序之间的安全性。每个应用程序驻留在一个单独的 IBM WebSphere sMash 服务器上,如图 4 所示。
图 4. 两个应用程序使用 SSL 通信
Application1 应该在 keyStore 和 trustStore 上都进行配置。Application2 应该仅在 keyStore 上配置来存储 SSL 证书。
清单 15 显示了 keyStore 如何被配置。下面的清单 17 将介绍一个 trustStore 所需的配置。
清单 17. 编辑 zero.config 来启用 SSL
/config/connection/destinations += {
"https://localhost:8085/*" : {
"connection" : {
"protocol" : "https",
"config" : {"httpsConfig" : "myHttpsConfig"}
}
}
}
@include "ssl/defaultTrustStore.config" {
"configKey" : "/config/connection/https/myHttpsConfig",
"disableTrustVerification" : "true"
}
|
在本文中,您学习了在 IBM WebSphere sMash 服务器中使用安全性机制增强您的应用程序的安全性。通过这些练习您:
- 在样例配置文件中启用了安全性
- 使用基础和基于表单的认证和授权检查了基于文件和基于 LDAP 的安全性机制
- 在样例应用程序中实现了 SSL 安全性
使用 IBM WebSphere sMash 服务器内置安全性模块来保护您的应用程序,还有很多排列和组合。本文只是冰山一角。现在您已经掌握了基础知识,可以进一步探讨功能丰富的安全性模块。
学习
- 全面了解 Project Zero
(WebSphere sMash Server)。
- 阅读 HTTP Authentication: Basic and Digest Access Authentication(RFC 2617)),该规范适用于 HTTP 的认证框架、原始的 Basic 认证模式和基于密码散列的模式,被称之为 “Digest Access Authentication” 。
- 学习 IBM WebSphere sMash 身份验证和授权 相关知识。
- 探讨您的应用程序如何利用 WebSphere sMash security 的优势。
-
developerWorks Web development
专区:通过专门关于 Web 技术的文章和教程,扩展您在网站开发方面的技能。
-
developerWorks Ajax 资源中心:这是有关 Ajax 编程模型信息的一站式中心,包括很多文档、教程、论坛、blog、wiki 和新闻。任何 Ajax 的新信息都能在这里找到。
-
developerWorks Web 2.0 资源中心,这是有关 Web 2.0 相关信息的一站式中心,包括大量 Web 2.0 技术文章、教程、下载和相关技术资源。您还可以通过 Web 2.0 新手入门 栏目,迅速了解 Web 2.0 的相关概念。
获得产品和技术
- 下载 WebSphere sMash。
- IBM 产品评估试用版软件 或 IBM SOA 人员沙箱,并开始使用来自 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 的应用程序开发工具和中间件产品。
讨论
- 在 Project Zero 论坛 中讨论各种主题。
- 分享您的知识:加入一个关注 web 主题的 developerWorks 小组。

