JAAS:灵活的Java安全机制(1)

转载 2004年07月18日 21:11:00
 摘要:

  Java Authentication Authorization Service(JAAS,Java验证和授权API)提供了灵活和可伸缩的机制来保证客户端或服务器端的Java程序。Java早期的安全框架强调的是通过验证代码的来源和作者,保护用户避免受到下载下来的代码的攻击。JAAS强调的是通过验证谁在运行代码以及他/她的权限来保护系统面受用户的攻击。它让你能够将一些标准的安全机制,例如Solaris NIS(网络信息服务)、Windows NT、LDAP(轻量目录存取协议),Kerberos等通过一种通用的,可配置的方式集成到系统中。本文首先向你介绍JAAS验证中的一些核心部分,然后通过例子向你展示如何开发登录模块。

  你是否曾经需要为一个应用程序实现登录模块呢?如果你是一个比较有经验的程序员,相信你这样的工作做过很多次,而且每次都不完全一样。你有可能把你的登录模块建立在Oracle数据库的基础上,也有可能使用的是NT的用户验证,或者使用的是LDAP目录。如果有一种方法可以在不改变应用程序级的代码的基础上支持上面提到的所有这一些安全机制,对于程序员来说一定是一件幸运的事。

  现在你可以使用JAAS实现上面的目标。JAAS是一个比较新的的Java API。在J2SE 1.3中,它是一个扩展包;在J2SE 1.4中变成了一个核心包。在本文中,我们将介绍JAAS的一些核心概念,然后通过例子说明如何将JAAS应用到实际的程序中。本文的例子是根据我们一个基于Web的Java应用程序进行改编的,在这个例子中,我们使用了关系数据库保存用户的登录信息。由于使用了JAAS,我们实现了一个健壮而灵活的登录和身份验证模块。

  Java验证和授权:概论

  在JAAS出现以前,Java的安全模型是为了满足跨平台的网络应用程序的需要而设计的。在Java早期版本中,Java通常是作为远程代码被使用,例如Applet,。因此最初的安全模型把注意力放在通过验证代码的来源来保护用户上。早期的Java安全机制中包含的概念,如SercurityManager,沙箱概念,代码签名,策略文件,多是为了保护用户。

  JAAS的出现反映了Java的演变。传统的服务器/客户端程序需要实现登录和存取控制,JAAS通过对运行程序的用户的进行验证,从而达到保护系统的目的。虽然JAAS同时具有验证和授权的能力,在这篇文章中,我们主要介绍验证功能。

  通过在应用程序和底层的验证和授权机制之间加入一个抽象层,JAAS可以简化涉及到Java Security包的程序开发。抽象层独立于平台的特性使开发人员可以使用各种不同的安全机制,而且不用修改应用程序级的代码。和其他Java Security API相似,JAAS通过一个可扩展的框架:服务提供者接口(Service Provider Interface,SPI)来保证程序独立于安全机制。服务提供者接口是由一组抽象类和接口组成的。图一中给出了JAAS程序的整体框架图。应用程序级的代码主要处理LoginContext。在LoginContext下面是一组动态配置的LoginModules。LoginModule使用正确的安全机制进行验证。

  图一给出了JAAS的概览。应用程序层的代码只需要和LoginContext打交道。在LoginContext之下是一组动态配置的LoginModule对象,这些对象使用相关的安全基础结构进行验证操作。

jt-2003-1-14-image001.gif
图一 JAAS概览

  JAAS提供了一些LoginModule的参考实现代码,比如JndiLoginModule。开发人员也可以自己实现LoginModule接口,就象在我们例子中的RdbmsLonginModule。同时我们还会告诉你如何使用一个简单的配置文件来安装应用程序。

  为了满足可插接性,JAAS是可堆叠的。在单一登录的情况下,一组安全模块可以堆叠在一起,然后被其他的安全机制按照堆叠的顺序被调用。

  JAAS的实现者根据现在一些流行的安全结构模式和框架将JASS模型化。例如可堆叠的特性同Unix下的可堆叠验证模块(PAM,Pluggable Authentication Module)框架就非常相似。从事务的角度看,JAAS类似于双步提交(Two-Phase Commit,2PC)协议的行为。JAAS中安全配置的概念(包括策略文件(Police File)和许可(Permission))来自于J2SE 1.2。JAAS还从其他成熟的安全框架中借鉴了许多思想。

从Hadoop 安全机制原理到当今主流安全机制

在Hadoop Common模块中除了之前我所分析过的4大主模块,还有一个也同样是非常重要的内容,就是Security---安全模块。不过,我只是简单的分析他的实现机制,并不会涉及代码的分析。同时,我...
  • Androidlushangderen
  • Androidlushangderen
  • 2014年12月13日 09:10
  • 4075

JavaSecurity和JAAS——Java标准安全体系概述(下)

java标准安全体系分为两大部分,一个是在JDK1.0引入并在JDK2进行了重构的代表着以代码为中心的授权体系。此体系下,关注的重点在于“这段代码能访问哪些系统资源”;另一个是在JDK1.3以扩展的形...
  • m0_37962779
  • m0_37962779
  • 2017年11月01日 15:28
  • 130

ActiveMQ 基于JAAS的安全机制

ActiveMQ版本 :5.9 ActiveMQ支持可插拔的安全机制,用以在不同的provider之间切换。 JAAS认证插件 JAAS(Java Authentication and Au...
  • sunshine_love
  • sunshine_love
  • 2015年03月07日 19:42
  • 1960

java安全 ——JAAS(Java 认证和授权服务)开发指南

以下内容转自: http://lyb520320.iteye.com/blog/720478 【0】README 1)本文翻译自:http://java.sun.com/developer/tec...
  • PacosonSWJTU
  • PacosonSWJTU
  • 2016年02月21日 18:53
  • 1604

java语言安全机制浅析

java通过所谓的沙箱安全模型保证了其安全性,下面我们就来看看java提供的安全沙箱机制。 组成沙箱的基本组件如下: 1.类装载器结构; 2.class文件检验器; 3.内置于...
  • RowandJJ
  • RowandJJ
  • 2014年05月20日 11:55
  • 2863

Jaas原理及实现

JAAS是对JCE安全框架的重要补充,通过提供认证用户和确定用户授权来增强JAVA解决方案的动态安全性,使得资源能够得到很好得到保护和控制(JAAS使用动态的安全策略来定义权限,而不是将其静态的嵌入到...
  • Jesse621
  • Jesse621
  • 2015年01月30日 11:54
  • 2568

Java 多线程安全机制

什么是多线程安全,java中有哪些机制可以保证线程安全
  • JackieeeCheng
  • JackieeeCheng
  • 2017年04月08日 20:46
  • 1256

java线程安全和锁机制详解

java线程安全和锁机制详解 . 在开始这篇blog之前应该先了解几个概念: 临界区: 保证在某一时刻只有一个线程能访问数据的简便办法。在任意时刻只允许一个线程对共享资源进行...
  • beyond59241
  • beyond59241
  • 2016年03月14日 19:59
  • 2039

Java RMI之HelloWorld程序以及相关的安全管理器的知识

Java RMI 指的是远程方法调用 (Remote Method Invocation)。它是一种机制,能够让在某个 Java 虚拟机上的对象调用另一个 Java 虚拟机中的对象上的方法。可以用此方...
  • wjrong_1
  • wjrong_1
  • 2015年07月22日 16:38
  • 1469

转载-ActiveMQ通过JAAS实现的安全机制

JAAS(Java Authentication and Authorization Service)也就是java认证/授权服务。这是两种不同的服务,下面对其做一些区别:验证(Authenticat...
  • u013465293
  • u013465293
  • 2017年05月12日 16:35
  • 98
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:JAAS:灵活的Java安全机制(1)
举报原因:
原因补充:

(最多只允许输入30个字)