灰狼的雕虫小技

灰狼和小红帽的现代版

Home Contact Syndicate this Site (RSS 2.0) Syndicate this Site (Atom) Login
  139 Posts :: 0 Stories :: 63 Comments :: 0 Trackbacks

文章 分类

存档

日记 分类

C/C++

Databases

Java

JavaScripts

Linux

友情连接


refference:http://java.sun.com/security/jaas/doc/api.html 可以将JAAS的类分为三个部分:认证和授权共有的类(Common Classes),认证部分的类(Authentication Classes),授权部分的类(Authorization Classes)。下面就分别介绍一下。 (一) Common Classes 这是认证和授权部分所共有的一些类的集合。核心类有: 1. Subject,是一个代表实体比如人或者服务的一系列信息的类,包含了实体的主特征(Principals),公共凭证(public predentials),私有凭证(private predentials); 2. Principals,和Subject相结合,代表了Subject的身份,实现了java.security.Principal和java.io.Serializable接口。 3. Credentials,公共凭证和私有凭证都不是JAAS核心类库的一部分,可以是任意的java类,开发人员可以开发自己的Credentials类,实现Refreshable和Destroyable接口。 1).Refreshable:提供给一个credential对象刷新能力的接口。比如说:一个credential对象可能有特殊的时间跨度的限制,通过刷新看其是否仍旧有效。该接口有两个方法:isCurrent(),refresh()需要Credentials类实现。 2).Destroyable,该接口提供消毁credential对象的能力,清除该对象的信息。有两个方法:isDestroyed(),destroy(). (二) Authentication Classes 认证身份是否合法时,通常要执行下面的几步: 1. 应用初始化一个LoginContext实例; 2. LoginContext 咨询Configuration获得所有用于该应用的LoginModules; 3. 应用触发LoginContext的login()方法; 4. Login方法触发该应用的所有LoginModules。每个LoginModule都试图去验证Subject的身份。验证成功,LoginModule将把相应的特征(Principals)及凭证关联到该Subject上; 5. LoginContext返回验证的结果给应用; 6. 如果验证成功,应用将从LoginContext得到验证过了的Subject。 介绍Authentication的类库: 1. LoginContext类,提供基本的方法来验证Subjects的身份,并提供了把应用和下层的认证技术分开的方法。LoginContext在认证的时候向Configuration咨询来确定所用的是那种认证服务,或者是哪个LoginModules,这样不同的LoginModules可以堆叠在同一个应用中而不需要对应用进行任何的修改。 下面的代码是如何验证及注销的: // let the LoginContext instantiate a new Subject LoginContext lc = new LoginContext("entryFoo"); try { // authenticate the Subject lc.login(); System.out.println("authentication successful"); // get the authenticated Subject Subject subject = lc.getSubject(); ... // all finished -- logout lc.logout(); } catch (LoginException le) { System.out.println("authentication unsuccessful"+le.printStackTrace()); } 2. LoginModule接口,使开发者可以把不同的验证技术堆叠在同一应用下。例如,一个LoginModule可以执行基于用户名/密码的表单形式的认证,另一种LoginModule可以基于硬件设备如智能卡等的验证。 3. CallbackHandler接口,LoginModules利用CallbackHandler来和用户交互得到用户的验证信息。LoginModules通过该接口得到用户所输入的信息,也可以提供给用户诸如认证状态的信息。应用可以定制CallbackHandler,例如,用户可以通过图形界面方式提示输入用户名,密码,也可以仅仅通过命令行简单的提示,可以看出LoginModules依旧独立于和用户交互的方式。 4. Callback接口,LoginModules可以传一系列的Callback对象给Callbackhandler的handle()方法,详细的信息请参考Callback API (三) Authorization Classes 通过认证后,就会根据在一个JAAS Policy文件中设定好的规则进行访问控制。 1. Policy类,是一个抽象类,代表了JAAS架构的访问控制策略。默认情况下,提供了基于对文件级的访问控制。Policy的子类必须实现一下两个方法: public abstract PermissionCollection getPermissions (Subject subject, CodeSource codesource); public abstract void refresh(); getPermissions方法返回赋予制定Subject的权限。Refresh()方法不断的更新不断的根据策略进行调整。下面给出了一部分代码来看看如何赋予用户Subject权限。 // grant entry syntax for the default JAAS policy grant CodeBase ["URL"], Signedby ["signers"], Principal [Principal_Class] ["Principal_Name"], Principal ... { permission Permission_Class ["Target_Name"] [, "Permission_Actions"] [, signedBy "SignerName"]; ... }; // example grant entry grant CodeBase "http://foo.com", Signedby "foo", Principal com.sun.security.auth.NTPrincipal "admin" { permission java.io.FilePermission "c:/user/admin", "read, write"; }; 如果Policy中没有指定Principal信息,将会抛出异常信息。CodeBase及Signedby部分是可选的。如果没有出现,任意代码将被匹配,任意的signer将被匹配。 在上面的例子中,grant entry规定了从http://foo.com下载的代码,由foo签名,由Windows NT的用户admin运行,在目录“c:/user/admin”中有读写的权限。多个Principals可在一个grant entry中列出来,并且以合集的形式起作用。 2. AuthPermission类,封装了JAAS所要求的基本的permissions。一个AuthPermission对象包含了一个名字,但没有列出行为。通过该类,要么可以得到一个命名了的permission规则,要么什么也得不到。 3. PrivateCredentialPermiSSion类,对访问Subject的私有凭证提供保护。 以上就是JAAS架构的核心类库。
posted on Thursday, February 16, 2006 12:39 PM #keenonjava——cnic

Feedback

# re: JAAS架构的核心类库中文版,可能翻译有误 2/20/2006 6:03 AM duckweed
怎么又没有分行呢?编辑过了阿。

Post Feedback

Title:
Name:
Url:
Comments: 
Protected by Clearscreen.SharpHIPEnter the code you see: