免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2179 | 回复: 1
打印 上一主题 下一主题

JAAS的核心类库中文版 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-02-16 15:44 |只看该作者 |倒序浏览
翻译水平有限,轻点拍砖
===========================================
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架构的核心类库。

论坛徽章:
0
2 [报告]
发表于 2006-02-17 07:49 |只看该作者
支持原创翻译!
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP