JAAS Tutorial
04:25
JAAS 在 J2SDK 1.3 就是一個 optional package 了, 在 J2SDK 1.4 就正式加入 .

此篇文章參考
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/GeneralAcnOnly.html
Authentication 身份驗證
可以下載範例程式碼.
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/tutorials/SampleAcn.java這程式是一個身份驗證的簡單範例, 他的執行觀念步驟如下
建立 LoginContext 的 instance
這時候就是建立一個 Sample 的 LoginContext, 並且利用一個 CallbackHandler 來處理 Callback 的資料.
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() 就可以了.
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 共有
- NameCallback 要求輸入使用者帳號
- PasswordCallback 要求輸入使用者密碼
- TextOutputCallback 回傳一些錯誤, 警告, 等訊息 LoginModule 給予使用者~
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 and policy 放在根目錄 !
將所有 java 檔案 complie 之後, 使用
#java -Djava.security.auth.login.config==sample_jaas.config sample.SampleAcn
執行程式, 測試成功的 id/password 為 testUser/testPassword , 大家可以測試了解相關的錯誤情況.
製作相關的 jars
執行 complie ( 不需要額外的 jar, 只要是 jdk1.4.* 的 JDK 環境就可以了 )
jar -cvf SampleAcn.jar sample/SampleAcn.class
sample/MyCallbackHandler.class
jar -cvf SampleLM.jar sample/module/SampleLoginModule.class
sample/principal/SamplePrincipal.class
jar -cvf SampleAction.jar sample/SampleAction.class
執行 policy 測試
java -classpath SampleAzn.jar;SampleAction.jar;SampleLM.jar
-Djava.security.manager
-Djava.security.policy==sampleazn.policy
-Djava.security.auth.login.config==sample_jaas.config sample.SampleAzn
Policy file 的語法
http://java.sun.com/j2se/1.4.2/docs/guide/security/PolicyFiles.html
Policy Tool 的相關參考
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/policytool.html
JAAS 參考文件
http://java.sun.com/j2se/1.4.2/docs/guide/security/jaas/JAASRefGuide.html