Java Authentication and Authorization ServiceJava Authentication and Authorization Service (JAAS) představuje javovskou verzi standardního Pluggable Authentication Module (PAM) frameworku.[1] Je využíván pro dvě činnosti:
Základní popisJAAS je standardní součástí Javy od JavaTM 2 SDK, Standard Edition (J2SDK), v 1.4. Ve verzi 1.3 byla součástí volitelnou. Byl přidán z důvodu nízké flexibility u původního systému zabezpečení, zejména pro provozování serverových aplikací. Jako součást Java 2 security se zabývá poskytováním povolení a bezpečnostní kontrolou těchto povolení. Toto vše je prováděno mimo kód aplikace, takže není nutné původní aplikaci upravovat. Samotná aplikace si není vědoma, že je na ní prováděna autentizace a autorizace. Obsah frameworku[1]Základní třídy
Třídy a Rozhraní autentifikace
Třídy autorizace
Průběh autentifikace a autorizace[1]Autentifikace
Autorizace
PříkladyJednoduchý příklad, kde se zjišťuje povolení k zápisu do souboru cheese.txt[2]Aplikace: package chp02; import java.io.File; import java.io.IOException; public class Chp02aMain { public static void main(String[] args) throws IOException { File file = new File("build/conf/cheese.txt"); try { file.canWrite(); System.out.println("Můžeme zapsat do cheese.txt"); } catch (SecurityException e) { System.out.println("Nemůžeme zapsat do cheese.txt"); } } }
Konfigurační soubor Policy: grant { permission java.io.FilePermission "build/conf/cheese.txt", "write"; };
Příklad logování do aplikace[3]Aplikace: CallbackHandler handler = new RanchCallbackHandler(userName, password); try { LoginContext loginContext = new LoginContext("RanchLogin", handler); // Přihlášení loginContext.login(); } catch (LoginException e) { // Chyba při přihlášení, nepodařilo se přihlásit e.printStackTrace(); }
Login konfigurační soubor: RanchLogin { com.javaranch.auth.RanchLoginModule required; };
'''LoginModul "RanchLoginModule":'''
public boolean login() throws LoginException {
boolean returnValue = true;
if (callbackHandler == null){
throw new LoginException("No callback handler supplied.");
}
Callback[] callbacks = new Callback[2];
callbacks[0] = new NameCallback("Username");
callbacks[1] = new PasswordCallback("Password", false);
try {
callbackHandler.handle(callbacks);
String userName = ((NameCallback) callbacks[0]).getName();
char [] passwordCharArray = ((PasswordCallback)
callbacks[1]).getPassword();
String password = new String(passwordCharArray);
//-->autentifikuje se pomocí jména a hesla, které musí být stejné
returnValue = userName.equals(password);
} catch (IOException ioe) {
ioe.printStackTrace();
throw new LoginException("IOException occurred:
"+ioex.getMessage());
} catch (UnsupportedCallbackException ucbe) {
ucbe.printStackTrace();
throw new LoginException("UnsupportedCallbackException encountered:
"+ucbe.getMessage());
}
System.out.println("Přihlášen");
return returnValue;
}
Konfigurační soubor Policy: grant { permission java.util.PropertyPermission "user", "read"; permission java.util.PropertyPermission "pass", "read"; permission java.util.PropertyPermission "java.security.auth.login.config", "read"; permission java.util.PropertyPermission "java.security.policy", "read"; permission javax.security.auth.AuthPermission "createLoginContext.RanchLogin"; };
Výsledky spuštění aplikace: Stejné jméno a heslo java -Duser=rahul -Dpass=rahul -Djava.security.auth.login.config=jaas.config -jar jaas-example.jar
Různé jméno a heslo java -Duser=rahul -Dpass=notrahul -Djava.security.auth.login.config=jaas.config -jar jaas-example.jar
Stejné jméno a heslo + spuštěn security manager java -Duser=rahul -Dpass=rahul -Djava.security.auth.login.config=jaas.config -Djava.security.manager -jar jaas-example.jar
Stejné jméno a heslo + spuštěn security manager + nstavena práva java -Duser=rahul -Dpass=rahul -Djava.security.auth.login.config=jaas.config -Djava.security.manager -Djava.security.policy=policy.config -jar jaas-example.jar
Login konfigurační soubor podrobněji[3]RanchLogin { com.javaranch.auth.FirstLoginModule requisite debug=true ; com.javaranch.auth.SecondLoginModule required debug=false email=admin@mydomain.com ; }; Jak je vidět z příkladu pod jedním jménem (RanchLogin) může být více než jeden LoginModule. Obsahují také své vlastní parametry, které jsou pak v jednotlivých modulech přístupné (debug pro FirstLoginModule, debug a email pro SecondLoginModule). Poslední položkou je konfigurace jednotlivých modulů. Ty mohou být podle klíčových slov:
Reference
|
Portal di Ensiklopedia Dunia