JAAS 概念

JAAS

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

1JAAS简介

Java安全框架最初集中在保护用户运行潜在的不可信任代码,是基于代码的来源(URL)和谁创建的代码(certificate)来给移动代码进行授权。Java 2 SDK 1.3引入了JAAS( Java Authentication and Authorization Service),增加了基于用户的访问控制能力,即根据谁在运行代码来进行授权。JAAS已经整合进了Java 2 SDK 1.4,作为标准的用户认证与授权模型。

2JAAS用户认证框架

JAAS认证被实现为可插入的方式,允许应用程序同底层的具体认证技术保持独立,新增或者更新认证方法并不需要更改应用程序本身。应用程序通过实例化LoginContext对象开始认证过程,引用配置文件中的具体认证方法,即LoginModule对象,来执行认证。

3JAAS:可插入式认证

一旦执行代码的用户通过了认证,JAAS授权组件将和核心Java访问控制模型一起工作,来保护对敏感资源的访问。从J2SDK 1.4开始,访问控制不仅基于代码的来源和签名者(CodeSource),而且还要检查谁在运行代码。执行代码的用户被表现为Subject对象,如果LoginModule认证成功,Subject对象被更新为相应的Principals和credentials。25.1.1. 一个简单的例子

本节通过一个简单的例子介绍JAAS开发的基本步骤。本节中的范例位于Apusic应用服务器安装目录中的docs/samples/jaas/simple目录。有关范例的内容、编译、部署与运行,可参考docs/samples/jaas/simple目录下的readme.txt文件。

范例程序的代码分为两部分,一部分为主程序,执行用户认证过程,源程序如下:

package samples;

import javax.security.auth.Subject;

import javax.security.auth.login.LoginContext;

import javax.security.auth.login.LoginException;

import com.sun.security.auth.callback.TextCallbackHandler;

public class CountFiles {

static LoginContext lc = null;

public static void main(String[] args) {

//使用配置文件中名字为“CountFiles”的条目

try {

lc = new LoginContext("CountFiles",

new TextCallbackHandler());

} catch (LoginException le) {

le.printStackTrace();

System.exit(-1);

}

try {

lc.login();

//如果没有异常抛出,则表示认证成功

} catch (Exception e) {

System.out.println("Login failed: " + e);

System.exit(-1);

}在线证书的申领流程

//以认证用户的身份执行代码

Object o = Subject.doAs(lc.getSubject(), new CountFilesAction());

System.out.println("User " + lc.getSubject( ) + " found " + o + " files.");

System.exit(0);

}

}

可以看出,主程序包含了三个重要的步骤:首先构造一个LoginContext对象,然后使用这个对象进行登录,最后,把用户作为doAs方法一个参数。

另一部分表示用户想要执行的具体操作,源程序如下:

package samples;

import java.io.File;

import java.security.PrivilegedAction;

class CountFilesAction implements PrivilegedAction {

public Object run() {

File f = new File(".");

File[] files = f.listFiles();

return new Integer(files.length);

}

}

25.1.2. JAAS核心类和接口

JAAS相关的核心类和接口分为三类,公共、认证和授权。

公共类:Subject,,Principal,Credential

认证类和接口:LoginContext,LoginModule,CallbackHandler,Callback

授权类 :Policy,AuthPermission,PrivateCredentialPermission

详细的描述请参考《JAAS Reference Guide》。

25.1.3. 配置LoginModules

JAAS认证被实现为一种可插入的方式,系统管理员可以通过配置文件为每一个应用程序配置LoginModuls来决定应用程序使用的认证技术。配置信息可以保存在文件或数据库中,通过javax.security.auth.login.Configuration对象进行读取。javax.security.auth.login.Configuration为抽象类,JDK提供了可实例化的子类com.sun.security.auth.login.ConfigFile,从文件中读取配置信息。配置文件中包含一个或多个条目,每一个条目指明了特定应用程序使用的认证方法。条目的结构如下:

<name used by application to refer to this entry> {

<LoginModule> <flag> <LoginModule options>;

<optional additional LoginModules, flags and options>;

};

可以看出,每一个条目由名字和一个或多个LoginModule组成。范例程序使用的配置文件login.conf内容如下:

CountFiles {

com.apusic.security.auth.login.ClientPasswordLoginModule required;

};

详细的描述信息可以参考Configuration。

25.1.4. 编写Policy文件

JAAS授权扩展了现有的Java安全体系结构,在给代码授权时可以包括一个多个Principal域,指出Principal代表的用户执行特定的代码时,具有分配的权限。因此,授权声明的基本形式为:

grant <signer(s) field>, <codeBase URL>

<Principal field(s)> {

permission perm_class_name "target_name", "action";

....

permission perm_class_name "target_name", "action";

};

缺省的策略文件实现和策略文件语法请参考《Default Policy Implementation and Policy File Syntax》。范例程序使用的策略文件policy.jaas内容如下:

grant codeBase "file:./build" {

permission java.security.AllPermission;

};

grant codeBase "file:/${apusic.home}/lib/apusic.jar" {

permission java.security.AllPermission;

};

grant codeBase "file:./build/actions" Principal com.apusic.security.PrincipalImpl "admin" {

permission java.io.FilePermission "<<ALL FILES>>", "read";

};

可以看出,给主程序和apusic.jar授予了所有权限;当执行具体操作的用户为“admin”时,授予了读取所有文件的权限。

25.1.5. 运行范例程序

范例程序提供了ant的build.xml脚本,请用户自己下载并安装ant。运行范例程序的步骤为:

首先启动Apusic应用服务器, 范例程序将登录服务器。

编译、运行程序。在simple目录下执行ant命令,会编译源程序CountFiles.java到build目录下,编译源程序CountFilesAction.java到build/actions目录下。然后会自动运行程序,相当于在命令行敲入下面的java命令:

java -classpath %APUSIC_HOME%/lib/apusic.jar;./build;./build/actions

-Djava.security.manager

-Djava.security.policy==policy.jaas

-Djava.security.auth.login.config==login.conf

-Dapusic.home=%APUSIC_HOME% samples.CountFiles

根据提示输入服务器,用户名和口令。 如果用“admin”登录,程序将正常运行结束,若使用其他用户名登录,将抛出访问控制异常。

时间: 2024-12-24 13:24:22

JAAS 概念的相关文章

01_Weblogic课程之概念篇:代理服务器,web服务器,应用程序服务器,JNDI概念,JTA概念,Java消息服务,Java验证和授权(JAAS),Java管理扩展,Web客户机,客户机应用程序

 1 什么是服务器 Weblogic中服务器分为两种,一种是受管服务器,另外一种是管理服务器. Weblogic课程(Weblogic是Oracle公司的,最开始的是BEA公司的) 一 系统管理 二 开发 三 性能调优 WLS(Weblogic Server) Weblogic 12c新特性是加入了云支持 2 集群的好处:失败迁移和负载均衡. 3 分布式系统 分布式系统将工作划分到几个独立的模块中. 单个模块出现故障对整个系统的影响较小,这使得分布式系统具有更高的: ----可用性 ----

weblogic一些基本概念

<收藏过来的----------http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html> WebLogic中的一些基本概念 WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来,下面是一些基本概念. Domain : 域是作为单元进行管理的一组相关的 WebLogic Server 资源.一个域包含一个或多个 WebLogi

WebLogic中的一些基本概念

WebLogic 中的基本概念 Domain : 域是作为单元进行管理的一组相关的 WebLogic Server 资源.一个域包含一个或多个 WebLogic Server 实例,这些实例可以是群集实例.非群集实例,或者是群集与非群集实例的组合.一个域可以包含多个群集.域还包含部署在域中的应用程序组件.此域中的这些应用程序组件和服务器实例所需的资源和服务.应用程序和服务器实例使用的资源和服务示例包括计算机定义.可选网络通道.连接器和启动类. Domain 中包含一个特殊的 WebLogic 服

【转载】WebLogic中的一些基本概念

转载自:http://www.cnblogs.com/cocowool/archive/2012/04/01/2428861.html 欢迎阅读原文,我这里只做备份哈. WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来,下面是一些基本概念. Domain : 域是作为单元进行管理的一组相关的 WebLogic Server 资源.一个域包含一个或多个 WebLogic Server 实例,这些

Web Service基本概念

转 Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intranet上的其它系统中传递过来的请求,轻量级的独立的通讯技术.是:通过SOAP在Web上提供的软件服务,使用WSDL文件进行说明,并通过UDDI进行注册. XML:(Extensible Markup Language)扩展型可标记语言.面向短期的临时数据处理.面向万维网络,是Soap的基础. Soap:(Simple Object Acc

WebLogic 的一些基本概念

WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来,下面是一些基本概念. Domain : 域是作为单元进行管理的一组相关的 WebLogic Server 资源.一个域包含一个或多个 WebLogic Server 实例,这些实例可以是群集实例.非群集实例,或者是群集与非群集实例的组合.一个域可以包含多个群集.域还包含部署在域中的应用程序组件.此域中的这些应用程序组件和服务器实例所需的资源和服

角色权限系统的 一些概念

用一个功能模块来举例子.一.建立角色功能并做分配:1.如果现在要做一个员工管理的模块(即Resources),这个模块有三个功能,分别是:增加,修改,删除.给这三个功能各自分配一个ID,这个ID叫做功能代号:Emp_addEmp,Emp_deleteEmp,Emp_updateEmp.2.建立一个角色(Role),把上面的功能代码加到这个角色拥有的权限中,并保存到数据库中.角色包括系统管理员,测试人员等.3.建立一个员工的账号,并把一种或几种角色赋给这个员工.比如说这个员工既可以是公司管理人员,

JEE , EJB概念深入概括

说起EJB,不得不提JEE,java EE 英文全称为:java Enterprise Edition企业级应用的软件架构,是一种思想,也是一种规范,方便从事这方面的开发者以及开发厂商进行规范性的开发和设计. 既然JEE在Java领域具有举足轻重的味道,那么肯定有塔的独到之处,那么他的独到之处就在于他能帮助我们以什么样独特的视角去解决问题,一个好的架构,高并发,多处理,分布式这些字眼是不能缺少的.而JEE解决的问题,就是分布式应用. 说到分布式应用,应该知道的一项技术就是RPC,英文全称为:Re

WebLogic 中的基本概念

WebLogic 中的基本概念 上周参加了单位组织的WebLogic培训,为了便于自己记忆,培训后,整理梳理了一些WebLogic的资料,会陆续的发出来,下面是一些基本概念. Domain : 域是作为单元进行管理的一组相关的 WebLogic Server 资源.一个域包含一个或多个 WebLogic Server 实例,这些实例可以是群集实例.非群集实例,或者是群集与非群集实例的组合.一个域可以包含多个群集.域还包含部署在域中的应用程序组件.此域中的这些应用程序组件和服务器实例所需的资源和服