Usługa uwierzytelniania i autoryzacji Javy dostarcza szkieletu dzięki któremu
projektancj mogą wymagać od użytkowników wykonujących ich kod, aby posiadali
wyraźne pozwolenie na wykonywanie pewnych operacji. Użytkownik próbując wykonać
określone fragmenty kodu może zostać poproszony o zidentyfikowanie się np. poprzez
podanie odpowiedniego loginu i hasła. Po zidentyfikowaniu możemy sprawdzić czy
ma on uprawnienia np. do zapisu czy też odczytu pewnych plików i zabronić mu
działać w określonych przypadkach.
Oczywiście w większości języków programowania można wykonać takie zabezpieczniea
bez dodatkowych narzędzi lecz JAAS pozwala na ustalanie autentyfikacji i autoryzacji
poza kodem programu co zdecydowanie ułatwia i uleastycznia ten proces.
JAAS jest standardowo włączona do Javy 1.4.0
początek |
ustalamy w nim pakiet dla którego obowiązuje dana autoryzacja (tu myPackage), moduł autoryzujący, znacznik kontroli, oraz opcjonalnie parametry.myPackage { com.sun.security.auth.module.NTLoginModule required debug=true; com.sun.security.auth.module.innyModul optional; }
początek |
package sample; import javax.security.auth.login.*; // . . . other import statements needed by MyCallbackHandler . . . /** * This Sample application attempts to authenticate a user * and reports whether or not the authentication was * successful. */ public class SampleAcn { /** * Attempt to authenticate the user. * * @param args input arguments for this application. * These are ignored. */ public static void main(String[] args) { 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); } // 3 próby autentyfikacji int i; for (i = 0; i < 3; i++) { try { // próba autentyfikacii lc.login(); // jeśli nie ma wyjątku to autentyfikacja się powiodła, break; } catch (LoginException le) { System.err.println("Authentication failed:"); System.err.println(" " + le.getMessage()); try { Thread.currentThread().sleep(3000); } catch (Exception e) { // ignore } } } // did they fail three times? if (i == 3) { System.out.println("Sorry"); System.exit(-1); } System.out.println("Authentication succeeded!"); } }
grant codebase "file:./SampleLM.jar" { permission javax.security.auth.AuthPermission "modifyPrincipals"; }; grant codebase "file:./SampleAcn.jar" { permission javax.security.auth.AuthPermission "createLoginContext.Sample"; };
Sample { sample.module.SampleLoginModule required debug=true; };
javac sample/SampleAcn.java sample/module/SampleLoginModule.java sample/principal/SamplePrincipal.java
jar -cvf SampleAcn.jar sample/SampleAcn.class sample/MyCallbackHandler.class
jar -cvf SampleLM.jar sample/module/SampleLoginModule.class sample/principal/SamplePrincipal.class
java -classpath SampleAcn.jar;SampleLM.jar -Djava.security.manager -Djava.security.policy==sampleacn.policy \ -Djava.security.auth.login.config==sample_jaas.config \ sample.SampleAcn
początek |
Sample { sample.module.SampleLoginModule required debug=true; };
grant codebase "file:./SampleLM.jar" { permission javax.security.auth.AuthPermission "modifyPrincipals"; }; grant codebase "file:./SampleAzn.jar" { permission javax.security.auth.AuthPermission "createLoginContext.Sample"; permission javax.security.auth.AuthPermission "doAsPrivileged"; }; grant codebase "file:./SampleAction.jar", Principal sample.principal.SamplePrincipal "testUser" { permission java.util.PropertyPermission "java.home", "read"; permission java.util.PropertyPermission "user.home", "read"; permission java.io.FilePermission "foo.txt", "read"; };
javac sample/SampleAction.java sample/SampleAzn.java sample/module/SampleLoginModule.java sample/principal/SamplePrincipal.java
jar -cvf SampleAzn.jar sample/SampleAzn.class sample/MyCallbackHandler.class
jar -cvf SampleAction.jar sample/SampleAction.class
jar -cvf SampleLM.jar sample/module/SampleLoginModule.class sample/principal/SamplePrincipal.class
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
początek |