JWorld@TW the best professional Java site in Taiwan
      註冊 | 登入 | 全文檢索 | 排行榜  

» JWorld@TW » Java SE 討論區  

按列印兼容模式列印這個話題 列印話題    把這個話題寄給朋友 寄給朋友   
reply to postflat modego to previous topicgo to next topic
本主題所含的標籤
無標籤
作者 JAAS authentication 的介紹 [精華]
jini

SoftLeader Taiwan

版主

發文: 1266
積分: 23
於 2004-02-23 05:59 user profilesend a private message to userreply to postreply to postsearch all posts byselect and copy to clipboard. 
ie only, sorry for netscape users:-)add this post to my favorite list
JAAS ( Java Authentication Authorization Service ) 其實是 java enterprise 一個很重要的課題, 如何去製作一個共用性高的 Security 機制, 一直是系統設計中不可缺少的一部份, 如果越來越多的系統增加在同一個企業之中, 彼此相互不相容的狀況會隨著企業軟體的增加而感到複雜, 所以 SSO ( Singal SignOn ) 也成為了重要的課題.

首先, JAAS 可以分為 authentication 及 authorization 這兩個部分

對於一般的使用者, 大概只需要了解 authentication 的部分

因為, authorization 部分的實作, 大多採用 identity server 或基礎 application server 所做掉, 目前執行的方法都是延續標準的 JAAS 採用 policy , permission 去做相關的 authorization .

本文的範例程式來自
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/GeneralAcnOnly.html

這程式是一個身份驗證的簡單範例, 他的執行觀念步驟如下
建立 LoginContext 的 instance

這時候就是建立一個 Sample 的 LoginContext, 並且利用一個 CallbackHandler 來處理 Callback 的資料.
1
2
3
4
5
6
7
8
9
10
11
12
LoginContext lc = null;
try {
    lc = new LoginContext("Sample", new MyCallbackHandler());
} catch (LoginException le) {
    System.err.println("Cannot create LoginContext. "
        + le.getMessage());
    System.exit(-1);
} catch (SecurityException se) {
    System.err.println("Cannot create LoginContext. "
        + se.getMessage());
    System.exit(-1);
}


呼叫 LoginContext login 這個 method

這個 login 將會執行連結到驗證伺服器之中, 很簡單地利用剛剛建立的 LoginContext, lc.login() 就可以了.
1
2
3
4
5
6
7
try {
// attempt authentication
    lc.login();
} catch (LoginException le) {
  System.err.println("Authentication failed:");
  System.err.println("  " + le.getMessage());
}


實作 CallbackHandler 這個 interface

我們也將產生 MyCallbackHandler 去實作 CallbackHandler, 什麼是 Callback 呢 ? 簡單來說, 就是 server 要求使用者登入的資訊 ! 我稱之"驗證規則"

class MyCallbackHandler implements CallbackHandler

當 LoginContext lc.login() 連結到 auth server 會回傳一些 callbacks 放到 CallbackHandler 之中, 因為標準的 callback 共有

*ChoiceCallback 要求使用者給予一些選擇
*ConfirmationCallback 要求使用者確認
*LanguageCallback 要求使用者的語系
*NameCallback 要求輸入使用者帳號
*PasswordCallback 要求輸入使用者密碼
*TextInputCallback 輸入一些錯誤, 警告, 等訊息作為解析用途
*TextOutputCallback 回傳一些錯誤, 警告, 等訊息 LoginModule 給予使用者~
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public void handle(Callback[] callbacks)
  throws IOException, UnsupportedCallbackException {
 
for (int i = 0; i < callbacks.length; i++) { if (callbacks[i] instanceof TextOutputCallback) {
 
// display a message according to a specified type . . .
 
} else if (callbacks[i] instanceof NameCallback) {
 
// prompt the user for a username . . .
 
} else if (callbacks[i] instanceof PasswordCallback) {
 
// prompt the user for a password . . .
 
} else { throw new UnsupportedCallbackException (callbacks[i], "Unrecognized Callback"); } } }


Login Config 的語法
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/LoginConfigFile.html

執行測試

請先下載

http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/sample_jaas.config
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/SampleAcn.java
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/SampleLoginModule.java
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/SamplePrincipal.java
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/sampleacn.policy

分別建立相關的目錄位置

SampleAcn.java 放在 sample 目錄之下, SampleLoginModule.java 放在 sample/module 之下, 而 SamplePricipal 放在 sample/principal 之下. 最後將該 config & policy 放在根目錄 !

將所有 java 檔案 complie 之後, 使用

#java -Djava.security.auth.login.config==sample_jaas.config sample.SampleAcn

執行程式, 測試成功的 id/password 為 testUser/testPassword , 大家可以測試了解相關的錯誤情況.


jini edited on 2004-02-23 06:02
reply to postreply to post
話題樹型展開
人氣 標題 作者 字數 發文時間
17806 [精華] JAAS authentication 的介紹 jini 3418 2004-02-23 05:59
2294 Re:JAAS authentication 的介紹 chih0812 488 2009-03-24 02:04
2175 Re:JAAS authentication 的介紹 chih0812 185 2009-03-24 08:46
2354 Re:JAAS authentication 的介紹 chih0812 71 2009-03-24 09:00
» JWorld@TW »  Java SE 討論區

reply to postflat modego to previous topicgo to next topic
  已讀文章
  新的文章
  被刪除的文章
Jump to the top of page

JWorld@TW 本站商標資訊

Powered by Powerful JuteForum® Version Jute 1.5.8