保持 Project Zero 和 WebSphere sMash 应用程序的安全性,第 1 部分: 身份验证和授权

快捷而轻松地启用基于访问控制的安全性

应用程序资源基于访问控制的安全性是 Project Zero 的核心特性之一。为了实现最大程度的简化,Project Zero 开发人员竭力简化了安全性的启用过程,使其变得更快更容易。通过本文,了解 Project Zero 的安全性以及如何创建用户注册表、为应用程序定义安全性规则、利用最常见的两种身份验证类型 — 基本的和基于表单的身份验证。在本文结束时,您将会获得为 Project Zero 应用程序建立安全性所需的所有工具。

Todd Kaplinger, Project Zero 架构和开发, WSO2 Inc

http://www.ibm.com/developerworks/i/p-tkaplinger.jpgTodd Kaplinger 是 IBM Software Group 的一名高级软件工程师,目前担任 Project Zero 的 Security 团队的架构师和团队负责人。Todd 是诸如 JSP、Servlet 和 PHP 这类基于 Web 的技术专家,目前主要侧重于研究新兴的 Web 2.0 技术及其对企业的影响。Todd 现在还是负责 JSR 223:Scripting for the Java Platform 的专家组成员及 Open AJAX Alliance 的成员,该联盟致力于各种 Ajax 框架在安全性方面的实现间的互操作性研究。Todd 曾担任过 IBM WebSphere Webcontainer 和 Remote Request Dispatcher (RRD) 项目的团队负责人和架构师,也曾作为 IBM 在 Servlet 专家组的代表参加过 JSR 154 Servlet 2.5 规范的研究。



Simon Kapadia, 安全性负责人,ISSW EMEA, WSO2 Inc

http://www.ibm.com/developerworks/i/p-skapadia.jpgSimon Kapadia 是位于 EMEA(欧洲、中东、非洲)的 ISSW(IBM Software Services for WebSphere)的安全性负责人。他致力于为 IBM 的客户设计和实现大型的分布式计算机系统。Simon 具有英文和戏剧专业的学士学位及计算机科学的硕士学位。他在 6 岁的时候就有了属于自己的计算机,并将自己的喜好转变成了事业追求。在加入 IBM 之前,Simon 曾为 Bell Laboratories 开发过数字交换方面的软件,为 ISP 管理过网络和 Web 应用程序,为 Transarc Corporation 就 DCE、DFS 和 Encina 提供过支持和顾问服务。



Nell Gawor, Project Zero 工程师, WSO2 Inc

http://www.ibm.com/developerworks/i/p-ngawor.jpgNell Gawor 是 IBM 北加利福尼亚 Research Triangle Park Project Zero 团队的一名顾问软件工程师。她从 Urbana-Champaign 的伊利诺斯州立大学获得了计算机科学硕士学位。



2009 年 3 月 09 日 (最初于 2007 年 11 月 20 日)

编辑留言:IBM® WebSphere® sMash 和 IBM WebSphere sMash Developer Edition 基于倍受称赞的 Project Zero 孵化器项目。Project Zero 是针对 WebSphere sMash 的开发社区,它将继续为开发人员提供免费的平台,使他们能够利用最新的构建、特性和社区支持开发应用程序。

Project Zero 安全性简介

Project Zero 实现了身份验证和授权。应用程序开发人员可以通过定义决定哪些资源受保护、通过什么方法保护以及允许哪些用户和组访问这些资源的安全性规则来利用 Zero 的安全性。Zero 的身份验证基于 JAAS(Java™ Authentication and Authorization Service),它允许添加不同类型的登录模块,且无需更改身份验证模型。

安全性是 Project Zero 的核心特性集的一部分。因此,启用安全性的惟一要求就是适当地配置与用户服务注册表相关的配置,并为每个受保护的资源配备恰当的规则。由于本文面向的是熟悉 Project Zero 的中级开发人员,要想对 Project Zero 安全性配置有全面的了解,可以参考 Developer's Guide(参见 参考资料 获得这个指南的链接)。

关于本文
本文是包含三个部分的系列文章中的第 1 部分,侧重于介绍在不更改很多默认配置参数的情况下如何在 Project Zero 应用程序中配置基于访问控制的安全性。本文假设您已经下载了 Project Zero 并已经完成了 介绍性教程 的学习或者已经自己编写过简单的应用程序。

Project Zero 的新手? Project Zero 提供了一个快捷简便地开发交互式 Web 应用程序的环境。它致力于为 Web 布署提供完善的基础设施,以让应用程序开发人员能将精力集中于业务逻辑。要想下载并学习更多关于 Project Zero 的知识,请参考我们的介绍性教程 “Project Zero 和 PHP 入门”。

本文将演示如何用 Eclipse 创建一个 Project Zero 应用程序。我们假设您已经从 Eclipse 更新站点安装了适当的 Project Zero 插件,并假设您已经知道如何在 Eclipse 内创建 Project Zero 应用程序。如果您不符合这些条件,请在继续之前参考 Developer's Guide 中的 “Core Getting Started” (在 参考资料 部分有相关的链接)。

本文的应用程序

我们这里创建的应用程序很简单,称为 StockTips。此应用程序允许发布最基础的股票市场信息。此应用程序会维护一个 “热点股票” 的列表,由一个股票市场专家更新并维护。这个专家经常在热门新股票在市场上一出现就将其加入到他的列表中,同时,他还会把业绩不好的企业的股票从其列表中删除。这个列表由很多对此专家的股评感兴趣的人查看,事实上,买卖股票的人买入或卖出都会参考他的评论。如果专家提供的评论还不错,那么很多炒股人都会赚到钱!

此应用程序的代码由一个名为 tips.groovy 的 groovy 文件及一个名为 tips.gt 的视图组成,分别如清单 1 和清单 2 所示:

清单 1. tips.groovy
todos = app.todos[];
if (todos == null) {
    todos = [];
}

if (request.method[] == 'POST' ) {
    def action = request.params.action[];
    if (action.equals("Add")) {
        def items = request.params.item[];
        if (null != items){
            item = zero.util.XMLEncoder.escapeXML(items);
            if (null != item && item.size() > 0)
            	todos.add(item);
        }
    } else {
		def selected = request.params.todos['*'];
        for (i in selected)
           todos.remove(i);
    }
    app.todos = todos; 
}

request.view = 'tips.gt';
render();
清单 2. tips.gt
<html>
    <head>
    <title>Stock Market Tips</title>
    </head>
  <body>
      <b>Current hot stock tips:</b>
      <br><br>
      <form name="input" method="POST">
      <% app.todos[].each { %>
        <input type="checkbox" name="todos" value="<%=it%>"> <%=it%> <br> 
      <% } %>
      <br>
      <input type="text" name="item">
      <input type="submit" name="action" value="Add">
      <input type="submit" name="action" value="Delete">
      </form>   
  </body>
</html>

图 1 显示了这个应用程序的主屏:

图 1. 最初的 tips 应用程序
最初的 tips 应用程序

敏锐的开发人员可能会注意到,这个应用程序非常类似于 todo 示例应用程序(为 Project Zero 编写的首批示例应用程序之一)。因为它借用了 todo 的代码,只是更改了界面而已。为了节省成本,该应用程序重用了示例代码以缩短投入市场的时间!注意,从这以后 todo 应用程序就退出使用了,也不再提供代码,但对本文没有影响,因为本文提供了大部分代码。

存在的问题

然而,不做任何修改简单地重用 todo 应用程序并不是一种好办法。todo 应用程序工作的方式是任何一个访问这个应用程序 URL 的人都可以添加或删除股票。这在开始只有少数几个人使用它来分享专家的高见时运行得还不错,但随着炒股人数的增加,恶意的炒股人开始出现,如图 2 所示。这些人会访问热门股票,为了赚钱自己写上一些评论,然后,他们会把评论删除以便只有自己才知道,甚至还会提供一些虚假信息!

图 2. 恶意修改 tips 应用程序
恶意修改 tips 应用程序

因此,专家决定要设法解决这个问题,于是,他开始研读关于 Project Zero 安全性方面的知识。

用户注册表

要对用户进行身份验证,必须要将用户列表保存到用户注册表中。Project Zero 提供了 “用户服务” 库,给出了访问用户注册表所需的一个可扩展框架。所支持的注册表类型包括基于文件和 LDAP(目录)的注册表,如果需要的话,用户服务还可以进一步扩展以创建定制的用户注册表。注册表类型的选择取决于具体的需求和环境:

  • 基于文件的注册表适合作为开发时(development-time)注册表。
  • 推荐将 LDAP 用于实际的产品程序,因为增强的可靠性和安全性对于产品十分重要。
  • 定制的用户注册表可以与其他注册表系统集成在一起。

本文使用的是基于文件的用户注册表。

创建基于文件的用户注册表

由于配置 LDAP 要花费时间并需要一定的专业水平,因此 Zero 提供了基于文件的用户注册表。为了进行以测试为目的的创建、更新以及添加用户,zero.core.webtools 项目提供了一个基于 Web 的管理控制台来管理用户。对不熟悉 Eclipse Webtools 的人来说,zero.core.webtools 程序包为 Zero 应用程序开发人员构建应用程序提供了一整套有用的实用功能,可以在构建应用程序时使用。当在 Eclipse 内创建 Zero 应用程序时,会默认地包括 Webtools 模块上的依赖项。在将应用程序部署成产品设置前,应该删除或注释掉 Webtools。

创建新的应用程序后,可以扩展 Zero 应用程序以查看 config 目录来验证 zero.core.webtools 依赖项是否存在,config 目录内应当有一个名为 ivy.xml 的文件。单击 ivy.xml,Eclipse 就会显示 ivy.xml 的视图,列出程序包的信息,如图 3 所示:

图 3. 包含在 ivy.xml 中的 Zero.core.webtools
ivy.xml 视图,展示了 zero.core.webtools 是应用程序的一部分

这个应用程序的依赖项列表应该包括 zero.core 和 zero.core.webtools。如果情况的确如此,就可以开始创建基于文件的用户注册表了。

要启动应用程序,右键单击这个应用程序并选择 Run As > Project Zero Application。参见图 4:

图 4. 作为 Project Zero 应用程序运行
作为 Project Zero 应用程序运行

一旦应用程序启动,就会有一个提示性消息登录到控制台,指示与应用程序关联的端口号(参见图 5):

图 5. 网络端口将被写入控制台
与应用程序关联的端口

这个应用程序现在就可以接受 HTTP 请求了。要开始创建用户,可以使用机器的主机名、登录到控制台的端口号以及服务器的相对路径 /zero/webtools/user/ 来访问这个基于 Web 的管理控制台。因为大多数时间处理的都是默认设置,所以在 http://localhost:8080/zero/webtools/user/ 应该可以访问该应用程序。对于此后的 URL,我们仍将假设服务器为 localhost,端口为 8080

注意:如果这是您第一次为这个 Project Zero 应用程序访问用户服务应用程序,那么控制台将会显示用户服务不能访问 zero.users 文件的错误提示。这很正常;此文件可以由用户服务应用程序创建,创建之后错误提示将不再出现。参见图 6:

图 6. 忽略第一次错误提示
zero.users 文件未创建时的错误消息

用户服务应用程序控制平台将会出现,如图 7 所示:

图 7. 用户服务应用程序
用户服务应用程序

现在可以创建用户和组了。我们将创建一些用于演示的用户。最初的这个专家就叫作 wizard。使用此应用程序的股评人是他的朋友 Alice、Bob、Charlie 和 Dave,他们的名字就是其各自的用户名。我们将 wizard 用户放到一个名为 wizards 的组(便于他在 IPO 之后增加更多的专家),而把其他用户放到一个名为 pundits 的组。

我们首先来创建 wizard 用户。在 Add User 表单类型下,输入 wizard 作为 UserName,提供密码(记住要用一个好的密码!),并为这个组指定 wizards(参见图 8):

图 8. 添加 wizard 用户
通过用户服务应用程序添加 wizard 用户

现在,重复前面的步骤创建其余用户,并把他们放入名为 pundits 的组。为 Alice、Bob、Charlie 和 Dave 各创建一个 userid。一旦完成创建,用户列表应该如图 9 所示:

图 9. 最终的用户列表
添加用户列表

用户和组

添加用户和组成员的意义是什么呢 从根本上看,这些数据将被输入到 Zero 应用程序 config 目录下名为 zero.users 的文件里。此文件的内容如下所示:

清单 3. zero.users 文件
wizard:5f4dcc3b5aa765d61d8application327deb882cf99:wizards
alice:6384e2b2184bcbf58eccf10ca7a6563c:pundits
bob:9f9d51bc70ef21ca5c14f307980a29d8:pundits
charlie:bf779e0933a882808585d19455cd7937:pundits
dave:1610838743cc90e3e4fdda748282d9b8:pundits

此文件只是用冒号分隔的一系列值,每行三个值,包括用户名、经过编码的密码和此用户所在的组名。“文件注册表” 就是这么一个简单文件。这种注册表明显不能针对大量用户进行扩展!

现在已经在基于文件的用户注册表中创建了用户和组,接下来可以开始定义安全性规则了。

定义安全性规则

正则表达式
除了保护特定的一个 URI 外,通过将 URI 属性设为一个正则表达式模式还可以保护一个资源。例如,如果想保护应用程序 /protected 下的所有东西,就可以把这个规则写为 conditions : "/request/path =~ /protected(/.*)?。这个语法使用的是 PRCE(Perl Compatible Regular Expressions),一种用来匹配任意目标字符串模式的有效方法。

由于正则表达式强大的功能,有可能您所写出的规则未能保护部分 URI 空间。另外,Project Zero 默认文件服务的副作用也很可能会被忽略,当 /foo/ 被访问时,它服务于 /foo/index.html (如果它存在话)。例如,若所写的规则为 "/request/path == /foo/index.html",但如果某人手动访问了 /foo,那么尽管它是同样的资源,后者也将不会受保护。正是由于这个原因,我们推荐将受保护的资源放在公共区域并保护这些区域以及该区域内的所有东西。所以推荐的模式就应该是 "/request/path =~ /prefix(/.*)?"。这将确保所有想要保护的资源均被涵盖。

现在,我们的 wizard 已经添加了用户和组。然而,还没有关于访问这个应用程序需要用户登录的任何说明和规定。在默认情况下,所有内容都是不受保护的;这里没有默认的授权限制。要想保护应用程序或应用程序中的一部分,就需要定义安全性规则。这些规则指定什么资源是受保护的;是通过何种身份验证进行保护的;以及允许哪些用户、组和/或角色进行访问。

条件子句使用户能够为需要保护的资源定义广泛的限制。在这个示例中,我们使用 Global Contect /request/path 键,它是键入到浏览器以便访问应用程序的上下文相关路径,并且它也是在 Project Zero 中能被保护的基本级别资源。为保护 URI 访问应用程序的主页,需要定义匹配特定条件集的规则。在应用程序 config 文件夹中打开 zero.config 文件并将清单 4 所示的行添加到文件中:

清单 4. 更新 zero.config
@include "security/rule.config"{
	"conditions" : "/request/path == /tips.groovy",
	"authType" : "Basic",
	"groups"  : ["wizards", "pundits"]
}

第一行是每个安全性规则的前导语句,它导入适当的模板。它让运行时知道您在配置一个安全性规则。第二行 conditions 实际定义用于这个安全规则的条件。在这种条件下,选择保护了一个单个的 URI 而不是一种模式。第三行,authType,指定要使用的身份验证的类型。我们将在这里使用 HTTP 基本身份验证(这在下一章节会有详细的解释),因为它不需要额外的配置。最后一行,groups,指定哪些组可以访问受保护的页面。在这里,我们向 wizards 和 pundits 这两个组里的所有成员授予访问权限;即我们目前所创建的所有用户,因为他们分属于这两个组。保存文件并重启 Zero 服务器以便能反映更新后的配置。

Zero 内置的身份验证类型有三种:基本的、基于表单的和 SSO。本文主要侧重于基本的和基于表单的身份验证。有关 SSO 身份验证的更多信息可以参考 Zero 文档(参见 参考资料)。

基本身份验证

注意:HTTP 基本身份验证并不是一种很好的验证用户的方式,不应该用于实际的产品部署。原因之一是一旦用户提供了其用户名和密码,它就会被简单编码(而非加密 — 而且其编码的方式很容易被破解),然后在每次对该服务器发出后续请求时 都被发送回服务器。

其背后的含义是双方面的。首先,这意味着对该服务器 “安全” 通信流量的任意截取都会泄露用户的实际用户名和密码,而用户名和密码在用户显式更改之前一直都是有效的(与使用 cookie 进行身份验证的典型方式对比,cookie 只会在很短的一段时间内有效,通常只有几个小时)。然而更重要的是,几乎不可能登出(log out)那些已经用基本身份验证验证了的用户,原因是每次他们访问一种新资源,其浏览器都会再次提供他们的用户名和密码!用户要想登出惟一的方法是关闭浏览器;但只有少数用户会这么做。

信用证

现在若要访问 StockTips 应用程序主页,浏览器将提示要求提供凭证。要获得访问授权,必须要提供一个属于指定组的有效用户(在用户文件中)的用户名和密码。参见图 10:

图 10. 基本的身份验证对话
图 10. 基本的身份验证对话

Realms

若资源受基本身份验证保护,浏览器将要求用户出示凭证才能访问。基本身份验证是惟一一种内置到 Zero 且无需额外配置的身份验证。可以使用 /config/security/realm 显式地指定由浏览器呈现的 “realm”。参见清单 5 所示的示例:

清单 5. 配置基本身份验证 realm 名
/config/security/realm="Private Hot Stock Tips"

这个 realm 之后会在让用户提供信用证时由浏览器显示(参见图 11):

图 11. “Private Hot Stock Tips” realm
显示 realm

基于表单的身份验证

基于表单的身份验证提供了全页表单登录。要实现此功能,必须在 public 文件夹下添加新的名为 login.html 的文件并将清单 6 所示的文本粘贴到该文件中:

清单 6. 基于表单登录
<html>
  <form method="POST" action="">
  <input type="text" name="zeroUserName">Username</input><BR>
  <input type="password" name="zeroPassword">Password<BR>
        
  <input type="submit" value="Submit"/>
  </form>
</html>

清单 6 中的重要之处是用户名和密码字段的名称。当表单发布时,Zero 使用名称来识别这些字段。接下来,通过添加如清单 7 所示的内容编辑 zero.config 以提供刚刚创建的登录表单的位置:

清单 7. 更新 zero.config 以便引用此表单
@include "security/form.config"{
	"formLoginPage" : "/login.html"
}

同样,在前面定义的安全规则中将 authType : "Basic" 行更改为 authType : "Form" 并重启 Zero 应用程序,这样就可以找到配置的更改。现在,如果再访问应用程序 http://localhost:8080/tips.groovy,就会看到刚才创建的表单。如果这次输入的是有效用户的凭证,就应该可以访问此页面。图 12 显示的就是这个登录表单:

图 12. 登录表单
登录表单

基于表单的身份验证比 HTTP 基本身份验证有很大进步,表现在以下几个方面:

  • 它允许您配置登录页面的外观;因为登录表单实质上是一个 Web 页面,所以只要表单的基本功能都在,就可以以任意选定的方式定制 HTML。
  • 基于表单的身份验证的结果是要使用 cookie 做身份验证,而不是让客户浏览器随每个请求发送编码了的用户名和密码。这个 cookie 即使被窃取,也只会在该浏览器会话期间有效,所以这种窃取不会导致用户名和密码的泄露。
  • 基于表单的身份验证可以包括进任何 Web 页面(原因是它实质上只是一种需要提交到应用程序的 URI 的 HTML 表单),提供了更好的用户体验。

高级授权

现在,我们的 wizard 已经为 StockTips 应用程序配置好了身份验证,该应用程序现在具有了简单的授权,即只要求用户进行身份验证就可访问应用程序。但是,pundits 组(其成员只需查看评论)和 wizards 组(其成员需要进行更新)这二者却没有任何区别。为了做这类授权决策,我们可以为不同的动作指定单独的授权限制,从而在选择显示什么内容时做出基于组成员资格的编程性授权决策。

Project Zero 社区
查阅 Project Zero 站点 以了解 Project Zero 是如何为当今的 Web 应用程序提供功能强大但却极为简单的开发和执行平台的。这个活跃的 社区 讨论了项目开发、为开发人员提供了帮助而且也十分希望倾听您的高见!

授权限制

与如前所述的基于 URI 的访问保护一样,还可以通过 HTTP 方法保护资源。例如,如果想要一种资源对 HTTP GET 请求开放,却对 PUT、POST 和 DELETE 请求无效,就需要将额外的子句添加到(/request/method =~ (PUT|POST|DELETE))的条件行(条件由 && for 'and' 子句 || for 'or' 子句分开),并且这种规则只适用于这些方法。

由于 StockTips 应用程序使用 GET 请求来显示信息,使用表单 POST 来接受更新,所以我们只能使用这种功能性来确保只有合适的组才能有权更新信息。修改 zero.config 文件以允许所有组均可访问 HTTP GET 请求,只有 wizards 组才能访问 HTTP POST 请求。由于这是对 zero.config 文件的最终更新,所以整个文件应该如清单 8 所示:

清单 8. 最终的 zero.config
/config/http/port=8080

@include "security/form.config"{
	 "formLoginPage" : "/login.html"
}

@include "security/rule.config"{
	 "conditions" : "(/request/path == /tips.groovy) && (/request/method == GET)",
     "authType" : "Form",
     "groups"  : ["wizards", "pundits"]
}
@include "security/rule.config"{
	 "conditions" : "(/request/path == /tips.groovy) && (/request/method == POST)",
     "authType" : "Form",
     "groups"  : ["wizards"]
}
/config/security/realm="Private Hot Stock Tips"

这种配置意味着 wizards 和 pundits 组中的所有成员都将能够访问应用程序 URL (/tips.groovy) 上的 GET,但只有 wizards 的成员才能 POST。因而,只有 wizards 才能进行更改。除了为特定组限制访问之外,还能为某些用户和角色限制访问(更多信息,请参见 Project Zero 文档,链接可以在 参考资料 找到)。特殊组 ALL_AUTHENTICATED_USERS 可以用来将访问权赋予所有已经成功登录的用户。

编程式授权

现在,只有 wizard 能够对股评进行更改,而他的 pundits 则是惟一能阅读这些评论的人。这种场景只能说是近乎 完美,而不是十全十美。pundits 虽不能进行实质更改,但应用程序界面还是会包括了能进行更改的某些字段,包括 Add、Delete 等等。当然,单击 Add 或 Delete 对非 wizards 组中的成员是无效的,原因是个人无权访问表单 POST,但是最好还是不要显示这些功能。

Project Zero 让您可以很方便地通过编程识别进行了身份验证的用户,进而可以基于用户名、用户所在的组或用户的角色来相应更改代码。在成功进行了身份验证之后,以下字段将会在 Global 上下文内可用:

/request/subject#remoteUser
/request/subject#groups

对于我们的 StockTips 应用程序,wizard 可以使用此信息决定是否要显示图形界面小部件来添加和删除应用程序 Web 页面上的提示。用清单 9 所示的内容替换行 request.view = 'tips.gt';

清单 9. 更新 StockTips 以根据组显示不同的视图
if(request.subject.groups[].contains("wizards")){
	request.view = 'wizards.gt';	
} else if(request.subject.groups[].contains("pundits")){
	request.view = 'pundits.gt';
} else request.view = 'tips.gt';

接下来,添加两个视图:wizards.gt(与原始的 tips.gt 相同)和 pundits.gt(已经明显做了削减,参见清单 10):

清单 10. pundits.gt
<html>
  <head>
    <title>Stock Market Tips</title>
  </head>
  <body>
    <b>Current stock tips:</b>
    <br>
    <ul>                
      <% app.todos[].each { %>
      	<li><%=it%></li> 
      <% } %>
     </ul>
    <br>
  </body>
</html>

现在,若要作为 wizards 组中的 wizard 登录,就应该可以看到全部的应用程序,而且还具有添加和删除股评的按钮(参见图 13):

图 13. 作为 wizards 组中的 wizard 登录
作为 wizards 组中的 wizard 登录

然而,如果我们作为 pundits 组中的 alice 登录,就会看到此应用程序的缩减版本(参见图 14):

图 14. 作为 pundits 组中的 alice 登录
作为 pundits 组中的 alice 登录

结束语

本文涵盖了在 Project Zero 启用安全性运行时以及对应用程序加以保护所需的全部步骤。我们讨论了如何设置用户注册表和两种用来对用户进行身份验证的方法(基本和基于表单的身份验证)。通过从应用程序检索用户、组和角色信息,我们还为声明式授权和编程式授权定义了安全规则。请继续关注本系列的第 2 部分,在该部分将会介绍如何将 LDAP 用于 Project Zero Security,以及第 3 部分,在该部分将会描述如何将 OpenID 用于 Project Zero Security。

参考资料

学习

  • 您可以参阅本文在 developerWorks 全球站点上的 英文原文
  • 参考 Project Zero Developer's Guide 获得有关 Project Zero 安全配置 的全面资料。
  • 本文假设您已经从 Eclipse 更新站点安装了合适的 Project Zero 插件,并已经知道如何在 Eclipse 创建 Project Zero 应用程序。如果没有具备这些条件,请先参考 Developer's Guide 的 Core Getting Started 页面。
  • 加入 Project Zero 社区 了解关于此项目的方方面面。
  • 浏览 developerWorks Web 开发专区 以获得工具、代码和资源以便立即开始开发 Web 2.0 应用程序。
  • developerWorks Ajax 资源中心 富含面向所有技能级别读者的信息以帮助您将 Ajax 构建到应用程序并显著改进用户的 Web 体验。

获得产品和技术

  • 下载 Project Zero 并开始应用本文中所学到的技能。

讨论

条评论

developerWorks: 登录

标有星(*)号的字段是必填字段。


需要一个 IBM ID?
忘记 IBM ID?


忘记密码?
更改您的密码

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件

 


在您首次登录 developerWorks 时,会为您创建一份个人概要。您的个人概要中的信息(您的姓名、国家/地区,以及公司名称)是公开显示的,而且会随着您发布的任何内容一起显示,除非您选择隐藏您的公司名称。您可以随时更新您的 IBM 帐户。

所有提交的信息确保安全。

选择您的昵称



当您初次登录到 developerWorks 时,将会为您创建一份概要信息,您需要指定一个昵称。您的昵称将和您在 developerWorks 发布的内容显示在一起。

昵称长度在 3 至 31 个字符之间。 您的昵称在 developerWorks 社区中必须是唯一的,并且出于隐私保护的原因,不能是您的电子邮件地址。

标有星(*)号的字段是必填字段。

(昵称长度在 3 至 31 个字符之间)

单击提交则表示您同意developerWorks 的条款和条件。 查看条款和条件.

 


所有提交的信息确保安全。


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=10
Zone=Web development, Sample IT projects
ArticleID=275703
ArticleTitle=保持 Project Zero 和 WebSphere sMash 应用程序的安全性,第 1 部分: 身份验证和授权
publish-date=03092009