访谈与书摘:Masoud Kalali的《GlassFish安全》

Masoud Kalali编著的《GlassFish安全》涵盖的内容有:Java EE安全模型;如何在Java EE应用中设计开发安全的Web、EJB模块,并将它们部署到GlassFish服务器环境中。Masoud在书里还详细介绍了GlassFish应用服务器和OpenDS目录服务器的安装及配置,OpenDS主要用来实现基于轻量级目录访问协议(LDAP)的用户认证和授权。

本书还介绍了用OpenSSO框架实现单点登录(SSO)的解决方案,其中包括用RESTful Web Services对用户进行认证和授权、通过OpenSSO解决方案确保Java EE应用和Web Services的安全。

InfoQ就此书对Masoud进行了采访,和他讨论了写作动机、Java EE 6里的安全新特性及其他一些话题。此外,InfoQ还为读者准备了本书的书摘(第三章:设计、开发安全的Java EE应用;778 KB的PDF)。

InfoQ:你为什么编写这本书呢?

Masoud Kalali:写这本书的原因有很多,但最主要的还是以下几点:

开发人员清晰地理解安全、尤其是Java EE安全是很重要的,这就是写这本书最重要的原因。我认为对Java EE领域的开发人员来说,掌握Java EE安全的基础知识至关重要,所以在书里我用简单却详尽的方式对安全进行了阐述。

另一方面,GlassFish是一款优秀的应用服务器产品,要在生产环境中使用GlassFish,理解它的安全机制是很有必要的。

最后就是想用比参考文档更容易理解的方式,向那些对安全感兴趣的开发人员介绍Java EE 6引入的安全新特性。

InfoQ:对Java EE 6引入的安全新特性,你是怎么看的?

Masoud:和Java EE的其他服务、组件相比,安全并没有太多的变化。EJB和Web层在Java EE 5和Java EE 6里都有非常大的变化,再看看安全,尽管Java EE 6在平台安全方面添加了一些新鲜气息,但我觉得我们仍然有进步的空间。

InfoQ:Web层组件Servlet现在可以通过声明(@ServletSecurity注解)和编程方式(HTTPServletRequest接口增加的login和authenticate方法)支持认证。你如何看待Web层提供的这种安全支持?

Masoud:现在的开发和部署都从XML描述符转向了注解,增加注解符合这一趋势。但编程方式的安全增强则更有意思一些,login、logout这些方法能让开发人员更好地控制认证和授权过程。很高兴Java EE平台能有更好的安全特性。

InfoQ:和Spring安全 3等其他安全框架相比,Java EE 6里的安全新特性怎么样?

Masoud:我觉得不能简单地把Java EE平台安全和Spring安全放在一起比较,顾名思义,前者是平台级的,后者只是基于平台构建、处理更细粒度需求的框架。当我们通盘使用Spring框架,或者软件架构师确信系统不需要十分细致的安全集成方案时,使用Spring安全就可以了。

Java EE平台提供的安全机制无法满足需求的时候,我倾向于使用OpenSSO之类的产品,OpenSSO不仅能非侵入式地和Java应用集成,还可以让Java应用从本地或通过RESTful接口调用其他编程语言,从而使用相同的基础设施。

InfoQ:安全相关的其他JSR是怎样和Java安全模型保持一致的呢?比如JASPIC(Java Authentication Service Provider Interface for Containers,JSR 196)和JACC(Java Authorization Contract for Containers,JSR 115)。

Masoud:众所周知,产品的可插拔性和扩展性在产品需要添加新特性的时候非常有用。我们发现,当产品A支持的契约接口同样被其他类似产品支持的时候,可插拔性会更加重要。

JSR-196和JSR-115这两个规范提供的大纲和契约接口统一了Java EE应用服务器的认证和授权模型。

JSR-196的目标对象不是应用开发人员,而是框架和安全产品的开发人员,因为它能简化不同认证模型和Java EE应用服务器之间的集成。使用JSR-196 SPI,开发人员可以开发自己的认证模块、把该模块插入应用服务器、对认证模块进行配置,并拦截服务器和客户端之间传输的消息。可以在四个点进行消息拦截:

  1. 客户端,请求发送给服务器之前。
  2. 服务器端,目标服务接受客户端请求之前。
  3. 服务器端,给客户端返回响应之前。
  4. 客户端,处理服务器响应之前。

消息拦截的使用示例可以参看GlassFish应用服务器的消息安全,Metro Web Services框架就是利用消息拦截提供了容易配置、容易管理的Web Services安全。

JSR-196的另一个应用场景是把OpenID等“none-supported”的认证模型集成到应用服务器当中,然后在部署到应用服务器里的应用中使用这些认证模型。

我们一提到安全,首先想到的两件事情就是认证和授权,正如我前面所说的,JSR-196为Java EE应用服务器提供了统一的验证机制。JSR-115提出的SPI则允许模块开发人员用自己的逻辑定义主体、定义角色、检查主体是否具有特定的角色,从而为支持JSR的Java EE应用服务器增加新的授权模型。

InfoQ:你希望Java EE后续的版本中能增加哪些安全特性呢?

Masoud:我希望能让开发人员更自由地控制整个认证和授权过程,不论使用缺省配置还是使用自己的配置和定制。目前,有些框架有专门的安全层,比如Seam;还有些框架给开发人员提供了很不错的安全方法定制,比如Spring安全;我期望能有一些基于角色的访问控制,也期望SSO能更加广泛地应用。OpenSSO、Oracle访问管理器、IBM Tivoli访问管理器等访问管理产品现在都开始支持刚刚提到的这些功能、以及很多其他的安全集成特性了。

InfoQ:谢谢你接受我们的采访。最后一个问题,你喜欢的IT类图书和非IT类图书分别是什么?

Masoud:说到IT类图书,我喜欢《大型软件体系结构:使用UML实践指南》,最喜欢的非IT类图书则是《魔戒》系列。

查看英文原文:Interview and Book Excerpt: Masoud Kalali’s GlassFish Security

你可能感兴趣的:(访谈与书摘:Masoud Kalali的《GlassFish安全》)