藍森林首頁 | 返回主頁 | 本站地圖 | 站內搜索 | 聯繫信箱 |
 您目前的位置:首頁 > 自由軟件 > 技術交流 > 應用編程


    

藍森林 http://www.lslnet.com 2006年6月6日 10:18



JAAS的核心類庫中文版

翻譯水平有限,輕點拍磚
===========================================
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架構的核心類庫。

支持原創翻譯!




Copyright © 1999-2000 LSLNET.COM. All rights reserved. 藍森林網站 版權所有。 E-mail : webmaster@lslnet.com