站内搜索: 请输入搜索关键词

当前页面: 开发资料首页J2EE 专题我翻译的J2EE平台安全(原著是《J2EE tutorial》)

我翻译的J2EE平台安全(原著是《J2EE tutorial》)

摘要: 我翻译的J2EE平台安全(原著是《J2EE tutorial》)

J2EE安全

J2EE应用编程模式将开发者从安全应用专业领域的实现细节分离出来。J2EE平台以一种方式提供了这种分离,这种方式能够提高应用的可移植性,并且允许他们被部署到不同的安全环境中。

这一章中的一些资料假定你已经有了一些基本的安全概念。为了更好掌握这些概念,我们强烈推荐你在开始本章前,去看看《The Java Tutorial》这本书的安全部分。

(见http://java.sun.com/docs/books/tutorial/security1.2/index.html)

概要

J2EE平台定义了一些在开发人员、装配人员和配置人员之间的公开的规约。在安全应用的上下文中,应用提供者被要求以一种能够让安全需求在应用配置中得到满足的方式来声明这些应用的安全需求。在应用中使用的被声明的安全机制是写在一个叫部署描述符(DD)的文本中。然后应用开发者使用容器方面的工具将部署描述符中的应用需求映射到J2EE服务器或者Web容器提供的安全机制当中去。

需要自己编写的安全(programmatic security)是与安全意识应用产生的安全决策有关的部分。当声明的安全不够表达应用的安全模式时,自己编写的安全代码(programmatic security)是很有用的。比如,一个应用的授权决策可能是基于一天内的时间的,也可能基于一次调用的参数,或者基于一个enterprise bean或web容器的内部策略。另一个应用很可能基于存储于数据库中的用户信息来严格限制访问。

J2EE和Java Web Services的应用是由可以被部署于不同容器上的组件构成的。这些组件是用来构建一个多层企业应用的。J2EE安全体系架构的目标就是为了通过做到每一层的安全从而使端到端安全。

各个层可以既有受保护的资源也有不受保护的资源。通常,你需要保护资源以确保只有经过授权(authorized)的用户才能访问它们。授权提供了对被保护资源的受控的访问。授权是基于鉴定(identification)和认证(authentication)的。鉴定是一个系统能够识别出实体的过程。认证是验证一个用户,设备或者计算机系统里的其他实体的鉴定的过程,通常作为在系统中允许访问资源的先决条件。

授权和认证对于不受保护的资源是不必要的。非授权的访问资源是指那些未经认证的或者匿名的访问。

域,用户,组,角色

一个J2EE的用户与一个操作系统的用户是相似的。典型的,两种用户都是人。可是这两种用户却是不同的。J2EE服务器认证服务是不知道当你登录到操作系统时你提供的用户名和密码的。J2EE服务器认证服务是与操作系统的安全机制没有联系的。这两种安全服务管理着不同域的用户。

J2EE服务器的认证服务包括并且与下面的组成部分相互影响:

域 ---- 一个被相同认证策略控制的用户和组的集合。

• 用户 ---- 一个在J2EE1.4应用服务器里定义的个人的(或者应用 程序的)身份。用户能够与组建立联系。

• 组 ---- 一组被认证的用户,他们是按一般的特性分类,定义在J2EE应用服务器上的。

• 角色 ---- 为了获得访问在应用中一组特定的资源的许可而定义的一个抽象的名字。一个角色可以比作是一把可以打开某个锁的钥匙。很多人可能都配有这样一把钥匙,而锁不管你是谁,只要你有合适的钥匙就行了。

J2EE服务器的认证服务能够管理在不同域中的用户。在J2EE 1.4 应用服务器的版本中,文档和证书域是提前为应用服务器配置好的。

当使用文档域(file realm)时,J2EE服务器的认证服务通过检查文档域来验证用户身份。这个域被用来认证除了使用HTTPS协议和证书的Web浏览器客户端以外的所有客户端。

一个文档域的J2EE用户可以属于一个J2EE组。(在证书域里的用户是不可以的。)一个J2EE组是一类按照一般特性分类的用户群,比如按照工作题目或者客户个性等一般特性分类。举个例子,大多数的电子商务应用的客户很可能属于一个CUSTOMER组,但是大的客户就应该属于PREFERRED组。把用户分类成组使得控制大量用户的访问更加容易。EJB层的安全部分(959页)将会展示如何控制用户访问Enterprise beans。

当使用证书域时,证书被用来和HTTPS协议一起来认证Web浏览器客户端。为了验证在证书域中的用户的身份,认证服务验证一个X.509证书。要学习创建这种证书的一步步的指令,请看Setting Up Digital Certificates(第933页)。X.509证书的公共名字域是被用作为主要的名字。

设置安全角色

当你设计一个enterprise bean或者Web组件时,你应该总想着将会访问这个组件的各类用户。比如,一个人力资源部门的Web应用,对于某个被设计为admin角色的人和某个被设计为director角色的人可能有不同请求URL。admin角色可能让你看到某些雇员的数据,但是director的角色却可以使你能看到薪水信息。每一种安全角色都是一个抽象的逻辑用户组,它是由组装这个应用的人定义的。当一个应用被部署时,部署人员将把这些角色映射到运行环境中的安全身份上。

一个J2EE组也代表了一类用户,但是它与角色是有不同的范围的。一个J2EE组是为了整个J2EE应用而设计的,而一个角色只是与J2EE服务器中的一个特定的应用有关。

请参照使用部署工具设置安全需求部分(917页),来学习创建一个Web应用的角色。

为了创建一个J2EE应用的角色,就要在EAR文件中声明它。比如,你可以用部署工具按照下面的过程创建一个角色。

1、 选择一个应用。

2、 在角色的标签面板里,点击Add来给表添加一行。

3、 Name列,填入一个安全角色的名称,例如bankCustomer。

4、 点击展开图标添加一个关于这个安全性角色的描述,例如银行的顾客。

5、 点击OK。

在你能够映射角色到用户或组(参考将角色映射到用户或组(913页))之前,你必须首先创建哪些用户或者组(参考管理用户(913页))。

管理用户

添加被授权的用户到应用服务器。

1、 假如你还没有开启应用服务器的话,就先将它启动。当启动或停止J2EE应用服务器时,就会看到一启动时应用服务器的信息。

2、 如果你没有开启管理员控制台,就要先开启它。你可以通过打开Web浏览器,浏览http://localhost:4848/asadmin来打开控制台。如果你在安装中改变了默认的Admin端口,就输入正确的端口号取代4848。

3、 输入在安装时你写的用户名和密码。

4、 Admin控制台的树里展开安全节点。

5、 再展开域节点(Realms node)。

6、 选择文档域(file realm)。

7、 点击管理用户(Manage Users)按钮。

8、 点击New来为file realm添加一个新的用户。

9、 输入用户的名字、密码和用户将要属于的组。点击OK添加用户到file realm的用户列表中。

10、 当你完成这个任务后点击Logout。

将角色映射到用户和组

当你正在开发一个J2EE应用时,你不需要知道这个将要运行的应用的域里定义了哪些用户的类别。在J2EE平台上,安全构架提供了一种机制来自动映射在应用里定义的角色到runtime realm里定义的用户或组。在你的应用被部署后,J2EE服务器的管理员将会把应用的角色映射到file realm的用户或组。

使用部署工具来映射应用程序中定义的角色到J2EE用户和(或)组:

1、使用在Managing Users(page 913)中讨论的Admin控制台添加被授权的用户和/或组到file realm。你必须在映射用户和组到应用程序的安全角色之前先为应用服务器定义它们。

2、在部署工具中创建或者打开一个Web应用。使用部署工具创建一个应用将在Packaging Web Modules(94页)中讲述。

3、在部署工具的树中选择这个Web应用。选择安全标签面板。我们使用安全标签面板来添加一个安全约束到Web应用。如果你希望了解更多的关于安全约束的信息,请参考保护Web资源部分(Protecting Web Resource) (page 916)。点击添加约束来添加一个安全约束到应用程序。

4、点击“添加Collection”来添加一个Web资源的Collection到应用程序中。

5、点击Edit Roles来选择哪个角色被授权访问应用程序中受限部分的资源。

6、在安全约束对话中被授权角色上点击Edit Roles。

7、点击Add来添加一个新的角色。点击在Name下的单元格。比如,添加CUSTOMER和MANAGER的角色。点击OK退出这次对话。

8、通过选择每一个角色并且点击Add,添加这两个角色到被授权的用户列表中。

9、点击OK退出Authorized Roles对话。

10、选择安全角色映射标签面板来把在应用服务器中定义的用户映射到应用程序中定义的角色。

11、在角色名字面板里选择一个角色名,比如MANAGER。这些是我们在安全约束对话中定义的被授权角色的角色名字。

11、 点击Add User/Group to Role。(如果这个按钮是灰色的,那么在继续之前先登录到Admin服务器)。使用这个对话来选择一个特定的用户或组映射到MANAGER角色上。然后,点击Map to Role。当MANAGER角色在角色名字面板中被选择时,如果你已经选择了一个用户,那么他的名字将会显示在用户名字面板中。当MANAGER角色被选中时,如果你已经选择了一个组,那么它的名字将会显示在组名字面板中。当你定义了使用Admin控制台的用户时,你提供给他们名字,密码和组。任何一个在此步被指派给选择的组的用户将拥有访问受限Web应用的权限。

Web层的安全

Web应用中,安全是使用部署工具在Web应用部署描述符中配置的。当设置被输入部署工具中后,它们被存在WAR包包含的部署描述符中。可以选择部署工具里的Tools菜单的Descriptor Viewer来查看产生的部署描述符。可以查看Chapter3获得更多关于部署描述符的信息。

在创建WAR包后,选择安全标签面板来配置它的安全元素。参考Setting Security Requirements Using deploytool以获得更多关于使用部署工具来完成以下这些任务的信息。

l 用户授权方法

在部署工具的安全标签里的用户授权方法区使你能够定义用户如何被提示登录。如果被定义了,用户在能够访问被安全约束保护的资源前必须被认证过。用户认证方法将在Using Login Authentication(Page920)里讨论。

l 安全约束

安全约束被用来定义对一个资源集合的访问权限的,使用的是它们的URL映射。安全约束将在Protecting Web Resources(Page 916)里讨论。

l Web资源集合

Web资源集合是安全约束的一部分并且描述了一个针对被保护资源的URL模式和HTTP方法对。Web资源集合将在Protecting Web Resources(Page 916)里讨论。

l 网络安全需求(安全验证方式)

网络安全需求被用于配置HTTP的基本验证或者在SSL基础上基于表单验证。要为每一个安全约束选择一种安全验证方式。网络安全需求(安全验证方式)将在What is Secure Socket Layer Technology(Page 932)中讨论。

l 安全角色

安全角色部分被用来设定哪些在此应用中定义了的角色被授权访问Web资源集合。这些在应用中定义的角色必须被映射到在服务器上定义的用户和组上。被授权的角色已经在Setting Up Security Roles(Page 912)中讨论过了。

这些部署描述符的元素可以直接写入Web.xml,也可以使用应用程序的部署工具来创建,比如deploy-tool。本文档描述了如何使用部署工具创建部署描述符。

一些Web应用的安全元素需要在Web server的部署描述符中定位,而不是仅仅在Web application的部署描述中定位。这些内容将在Installing and Configuring SSL Support(page 932),Using Programmatic Security in Web Tier(page 931),和Setting up Security Roles(page 912)中讲诉。



↑返回目录
前一篇: 在eclipse + MyEclipse下配置建立J2EE工程
后一篇: [总结]J2EE综合应用