<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="http://www.multimediaexpo.cz/mmecz/skins/common/feed.css?270"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="cs">
		<id>http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Java_Authentication_and_Authorization_Service</id>
		<title>Java Authentication and Authorization Service - Historie editací</title>
		<link rel="self" type="application/atom+xml" href="http://www.multimediaexpo.cz/mmecz/index.php?action=history&amp;feed=atom&amp;title=Java_Authentication_and_Authorization_Service"/>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Java_Authentication_and_Authorization_Service&amp;action=history"/>
		<updated>2026-06-15T11:20:22Z</updated>
		<subtitle>Historie editací této stránky</subtitle>
		<generator>MediaWiki 1.16.5</generator>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Java_Authentication_and_Authorization_Service&amp;diff=503304&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Java_Authentication_and_Authorization_Service&amp;diff=503304&amp;oldid=prev"/>
				<updated>2014-01-22T09:55:52Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;table style=&quot;background-color: white; color:black;&quot;&gt;
		&lt;tr valign='top'&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;← Starší verze&lt;/td&gt;
		&lt;td colspan='1' style=&quot;background-color: white; color:black;&quot;&gt;Verze z 22. 1. 2014, 09:55&lt;/td&gt;
		&lt;/tr&gt;&lt;/table&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	<entry>
		<id>http://www.multimediaexpo.cz/mmecz/index.php?title=Java_Authentication_and_Authorization_Service&amp;diff=503303&amp;oldid=prev</id>
		<title>Sysop: 1 revizi</title>
		<link rel="alternate" type="text/html" href="http://www.multimediaexpo.cz/mmecz/index.php?title=Java_Authentication_and_Authorization_Service&amp;diff=503303&amp;oldid=prev"/>
				<updated>2010-10-21T09:17:43Z</updated>
		
		<summary type="html">&lt;p&gt;1 revizi&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Nová stránka&lt;/b&gt;&lt;/p&gt;&lt;div&gt;JAAS představuje javovskou verzí standardního Pluggable Authentication Module (PAM) frameworku.&amp;lt;ref name=&amp;quot;java&amp;quot;&amp;gt;{{Citace elektronické monografie&lt;br /&gt;
 | titul = JAAS Reference Guide&lt;br /&gt;
 | url = http://java.sun.com/javase/6/docs/technotes/guides/security/jaas/JAASRefGuide.html&lt;br /&gt;
 | jazyk = anglicky&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Je využíván pro dvě činnosti:&lt;br /&gt;
&lt;br /&gt;
* '''Autentizace''' (Ověření pravosti) – ověření identity uživatele. Provádí se nejčastěji přijetím uživatelova jména a hesla. Ověření je bezpečné a důvěryhodné.&lt;br /&gt;
* '''Autorizace''' – určení, zda ověřený uživatel má práva k přístupu k určité části systému&lt;br /&gt;
&lt;br /&gt;
== Základní popis ==&lt;br /&gt;
&lt;br /&gt;
JAAS 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.&lt;br /&gt;
&lt;br /&gt;
== Obsah frameworku&amp;lt;ref name=&amp;quot;java&amp;quot;/&amp;gt; ==&lt;br /&gt;
=== Základní třídy ===&lt;br /&gt;
&lt;br /&gt;
* '''Subject''' – zastupuje zdroj požadavku (uživatele), může jím být jak osoba, tak služba. Po autentizaci je k němu připojeno až několik objektů Principal a Credential.&lt;br /&gt;
* '''Principal''' – zastupuje identitu uživatele. Vždy se jedná jen o jednu identitu, ale Subject jich může obsahovat několik. Může jí být například zaměstnanecké číslo, rodné číslo, jméno… Dále zastupuje role uživatele v systému. Subject opět může mít více rolí.&lt;br /&gt;
* '''Credential''' – Může jím být cokoliv, co dokáže prokázat identitu uživatele (jméno a heslo, otisk prstu…) Není součástí knihovny JAAS, neboť jakákoliv třída může být Credential. Měl by implementovat metody [http://java.sun.com/j2se/1.4.2/docs/api/javax/security/auth/Refreshable.html Refreshable] a [http://java.sun.com/j2se/1.4.2/docs/api/javax/security/auth/Destroyable.html Destroyable]. Credential může být veřejný nebo soukromý. Pod veřejným si lze představit jméno a pod soukromým heslo.&lt;br /&gt;
&lt;br /&gt;
=== Třídy a Rozhraní autentifikace ===&lt;br /&gt;
&lt;br /&gt;
* '''LoginContext''' – obsahuje základní metody pro autentizaci Subjectu&lt;br /&gt;
* '''LoginModule''' – rozhraní pro přidání vlastní autentizační technologie&lt;br /&gt;
* '''CallbackHandler''' – rozhraní pro komunikaci uživatele s LoginModule a naopak&lt;br /&gt;
* '''Callback''' – rozhraní pro přenos různých autentizačních informací. &lt;br /&gt;
&lt;br /&gt;
=== Třídy autorizace ===&lt;br /&gt;
&lt;br /&gt;
* '''Policy''' – abstraktní třída reprezentující tzv. povolenku. Konfiguruje se pomocí souboru, kde je specifikováno, jaká povolení jsou přiřazena kódu spuštěného z určitého zdroje (URL)  identitou (osobou) Principal.&lt;br /&gt;
* '''AuthPermission''' – třída pro základní povolení v JAAS. Využívá předvolené názvy pro určitá povolení.&lt;br /&gt;
* '''PrivateCredentialPermission''' – třída pro ochranu soukromých Credential.&lt;br /&gt;
&lt;br /&gt;
== Průběh autentifikace a autorizace&amp;lt;ref name=&amp;quot;java&amp;quot;/&amp;gt;==&lt;br /&gt;
=== Autentifikace ===&lt;br /&gt;
&lt;br /&gt;
* Aplikace vytvoří instanci LoginContext&lt;br /&gt;
* LoginContext pomocí dat z konfigurace načte všechny LoginModule přidružené k aplikaci&lt;br /&gt;
* Aplikace zavolá login metodu na LoginContext&lt;br /&gt;
* Login metoda zavolá všechny LoginModule. Ty se pokusí o autentifikaci subjektu. Pokud se to podaří, jsou objektu Subject přiřazeny relevantní Principal a Credential. Tímto je subjekt autentizovaný.&lt;br /&gt;
* LoginContext předá status o autentizaci aplikaci&lt;br /&gt;
* Při úspěšné autentizaci dostane aplikace objekt Subject od LoginContext&lt;br /&gt;
&lt;br /&gt;
===Autorizace===&lt;br /&gt;
&lt;br /&gt;
* Uživatel musí být autentizován&lt;br /&gt;
* Subject, který je výsledkem autentizace, musí mít k sobě přiřazený kontext řízení přístupu (access control context) &lt;br /&gt;
* Principal položky musí být konfigurovány v Policy&lt;br /&gt;
&lt;br /&gt;
== Příklady ==&lt;br /&gt;
=== Jednoduchý příklad, kde se zjišťuje povolení k zápisu do souboru cheese.txt&amp;lt;ref name=&amp;quot;JAASact&amp;quot;&amp;gt;{{Citace elektronické monografie&lt;br /&gt;
 | příjmení = Coté&lt;br /&gt;
 | jméno = Michael&lt;br /&gt;
 | titul = JAAS in action&lt;br /&gt;
 | url = http://jaasbook.wordpress.com/&lt;br /&gt;
 | druh nosiče = &amp;quot;PDF online&amp;quot;&lt;br /&gt;
 | datum vydání = 2005-10-26&lt;br /&gt;
 | jazyk = anglicky&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
'''Aplikace:'''&lt;br /&gt;
 package chp02;&lt;br /&gt;
 &lt;br /&gt;
  import java.io.File;&lt;br /&gt;
  import java.io.IOException;&lt;br /&gt;
 &lt;br /&gt;
  public class Chp02aMain {&lt;br /&gt;
 &lt;br /&gt;
    public static void main(String[] args) throws IOException {&lt;br /&gt;
      File file = new File(&amp;quot;build/conf/cheese.txt&amp;quot;);&lt;br /&gt;
      try {&lt;br /&gt;
        file.canWrite();&lt;br /&gt;
        System.out.println(&amp;quot;Můžeme zapsat do cheese.txt&amp;quot;);&lt;br /&gt;
      } catch (SecurityException e) {&lt;br /&gt;
        System.out.println(&amp;quot;Nemůžeme zapsat do cheese.txt&amp;quot;);&lt;br /&gt;
      }&lt;br /&gt;
  }&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Aplikace si vytvoří objekt souboru cheese.txt&lt;br /&gt;
* Zjistí, zda má povolení pro zápis do tohoto souboru&lt;br /&gt;
* Podle nastavených práv pak zjistí, zda je schopen zápisu do souboru (pak je vyhozeno hlášení „Můžeme zapsat do cheese.txt“), nebo je vyhozena bezpečnostní výjimka a zahlášeno „Nemůžeme zapsat do cheese.txt“&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Konfigurační soubor Policy:'''&lt;br /&gt;
 grant&lt;br /&gt;
 {&lt;br /&gt;
  permission java.io.FilePermission &amp;quot;build/conf/cheese.txt&amp;quot;, &amp;quot;write&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
* Garantujeme povolení typu FilePermission na soubor &amp;quot;build/conf/cheese.txt&amp;quot; a to na zápis do tohoto souboru&lt;br /&gt;
&lt;br /&gt;
=== Příklad logování do aplikace&amp;lt;ref name=&amp;quot;ranch&amp;quot;&amp;gt;{{Citace elektronické monografie&lt;br /&gt;
 | příjmení = Bhattacharjee&lt;br /&gt;
 | jméno = Rahul&lt;br /&gt;
 | titul = Authentication using JAAS&lt;br /&gt;
 | url = http://www.javaranch.com/journal/2008/04/Journal200804.jsp&lt;br /&gt;
 | editoři = Ulf Dittmer &lt;br /&gt;
 | datum vydání = 4.2008&lt;br /&gt;
 | jazyk = anglicky&lt;br /&gt;
}}&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
'''Aplikace:'''&lt;br /&gt;
 CallbackHandler handler = new RanchCallbackHandler(userName, password); &lt;br /&gt;
 &lt;br /&gt;
 try {&lt;br /&gt;
    LoginContext loginContext = new LoginContext(&amp;quot;RanchLogin&amp;quot;, handler);&lt;br /&gt;
    // Přihlášení&lt;br /&gt;
    loginContext.login();&lt;br /&gt;
 } catch (LoginException e) {&lt;br /&gt;
    // Chyba při přihlášení, nepodařilo se přihlásit&lt;br /&gt;
    e.printStackTrace();&lt;br /&gt;
 }&lt;br /&gt;
&lt;br /&gt;
* Aplikace vytvoří instanci LoginContext&lt;br /&gt;
* Provede se pokus o nalogování&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Login konfigurační soubor:'''&lt;br /&gt;
 RanchLogin {&lt;br /&gt;
    com.javaranch.auth.RanchLoginModule required;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
* Tento soubor určuje, který z LoginModule bude použit pro logování a jak (viz Login konfigurační soubor podrobněji).&lt;br /&gt;
* Zde se nastavuje, že pro jméno &amp;quot;RanchLogin&amp;quot; je použito RanchLoginModule a je nutné, aby modul uživatele autentizoval&lt;br /&gt;
* Nastavuje se pro JVM přes parametr: -Djava.security.auth.login.config=&amp;quot;JAAS_CONFIG_FILENAME&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;java&amp;quot;&amp;gt;&lt;br /&gt;
'''LoginModul &amp;quot;RanchLoginModule&amp;quot;:'''&lt;br /&gt;
 public boolean login() throws LoginException {&lt;br /&gt;
    boolean returnValue = true;&lt;br /&gt;
 	if (callbackHandler == null){&lt;br /&gt;
        throw new LoginException(&amp;quot;No callback handler supplied.&amp;quot;);&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    Callback[] callbacks = new Callback[2];&lt;br /&gt;
    callbacks[0] = new NameCallback(&amp;quot;Username&amp;quot;);&lt;br /&gt;
    callbacks[1] = new PasswordCallback(&amp;quot;Password&amp;quot;, false);&lt;br /&gt;
 &lt;br /&gt;
    try {&lt;br /&gt;
        callbackHandler.handle(callbacks);&lt;br /&gt;
        String userName = ((NameCallback) callbacks[0]).getName();&lt;br /&gt;
        char [] passwordCharArray = ((PasswordCallback)  &lt;br /&gt;
          callbacks[1]).getPassword();&lt;br /&gt;
        String password = new String(passwordCharArray);&lt;br /&gt;
 //--&amp;gt;autentifikuje se pomocí jména a hesla, které musí být stejné         &lt;br /&gt;
        returnValue = userName.equals(password);&lt;br /&gt;
    } catch (IOException ioe)  {&lt;br /&gt;
        ioe.printStackTrace();&lt;br /&gt;
        throw new LoginException(&amp;quot;IOException occured:&lt;br /&gt;
          &amp;quot;+ioex.getMessage());&lt;br /&gt;
    } catch (UnsupportedCallbackException ucbe) {&lt;br /&gt;
        ucbe.printStackTrace();&lt;br /&gt;
        throw new LoginException(&amp;quot;UnsupportedCallbackException encountered:&lt;br /&gt;
          &amp;quot;+ucbe.getMessage());&lt;br /&gt;
    }&lt;br /&gt;
 &lt;br /&gt;
    System.out.println(&amp;quot;Přihlášen&amp;quot;);&lt;br /&gt;
    return returnValue;&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
* Pomocí Callbacků a CalbackHandleru se získá jméno a heslo&lt;br /&gt;
* Porovná se, zda se jméno shoduje s heslem&lt;br /&gt;
* Vrátí se návratová hodnota true nebo false podle porovnání jména a hesla&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Konfigurační soubor Policy:'''&lt;br /&gt;
 grant {&lt;br /&gt;
    permission java.util.PropertyPermission &amp;quot;user&amp;quot;, &amp;quot;read&amp;quot;;&lt;br /&gt;
    permission java.util.PropertyPermission &amp;quot;pass&amp;quot;, &amp;quot;read&amp;quot;;&lt;br /&gt;
    permission java.util.PropertyPermission&lt;br /&gt;
     &amp;quot;java.security.auth.login.config&amp;quot;, &amp;quot;read&amp;quot;;&lt;br /&gt;
    permission java.util.PropertyPermission &amp;quot;java.security.policy&amp;quot;, &amp;quot;read&amp;quot;;&lt;br /&gt;
    permission javax.security.auth.AuthPermission&lt;br /&gt;
     &amp;quot;createLoginContext.RanchLogin&amp;quot;;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
* Nastavení práv pro možnost vytváření objektu LoginContext a přístup k atributům&lt;br /&gt;
* Je nutné pouze při aktivním security manageru&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''Výsledky spuštění aplikace:'''&lt;br /&gt;
&lt;br /&gt;
''Stejné jméno a heslo''&lt;br /&gt;
 java -Duser=rahul&lt;br /&gt;
     -Dpass=rahul&lt;br /&gt;
     -Djava.security.auth.login.config=jaas.config&lt;br /&gt;
     -jar jaas-example.jar&lt;br /&gt;
&lt;br /&gt;
* Přihlášení proběhlo v pořádku&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Různé jméno a heslo''&lt;br /&gt;
 java -Duser=rahul&lt;br /&gt;
     -Dpass=notrahul&lt;br /&gt;
     -Djava.security.auth.login.config=jaas.config&lt;br /&gt;
     -jar jaas-example.jar&lt;br /&gt;
&lt;br /&gt;
* Jméno a heslo nejsou stejné, proto se nepřihlásí&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Stejné jméno a heslo + spuštěn security manager''&lt;br /&gt;
 java -Duser=rahul&lt;br /&gt;
     -Dpass=rahul&lt;br /&gt;
     -Djava.security.auth.login.config=jaas.config&lt;br /&gt;
     -Djava.security.manager&lt;br /&gt;
     -jar jaas-example.jar&lt;br /&gt;
&lt;br /&gt;
* Nejsou nastavena práva. Není tedy schopen provést operace pro přihlášení a nepřihlásí se&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
''Stejné jméno a heslo + spuštěn security manager + nstavena práva''&lt;br /&gt;
 java -Duser=rahul&lt;br /&gt;
     -Dpass=rahul&lt;br /&gt;
     -Djava.security.auth.login.config=jaas.config&lt;br /&gt;
     -Djava.security.manager&lt;br /&gt;
     -Djava.security.policy=policy.config&lt;br /&gt;
     -jar jaas-example.jar&lt;br /&gt;
&lt;br /&gt;
* Přihlášení proběhlo v pořádku&lt;br /&gt;
&lt;br /&gt;
=== Login konfigurační soubor podrobněji&amp;lt;ref name=&amp;quot;ranch&amp;quot;&amp;gt;&amp;lt;/ref&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
 RanchLogin {&lt;br /&gt;
    com.javaranch.auth.FirstLoginModule&lt;br /&gt;
        requisite debug=true ;&lt;br /&gt;
 &lt;br /&gt;
    com.javaranch.auth.SecondLoginModule&lt;br /&gt;
        required debug=false email=admin@mydomain.com ;&lt;br /&gt;
 };&lt;br /&gt;
&lt;br /&gt;
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:&lt;br /&gt;
&lt;br /&gt;
* '''Required''' – Modul musí autentizovat uživatele. Pokud se tak nestane, stejně je předáno řízení dalšímu LoginModul&lt;br /&gt;
* '''Requisite''' – Pokud se nepovede přihlášení, vrátí se okamžitě zpět do aplikace a další LoginModuly se nespouští&lt;br /&gt;
* '''Sufficient''' – Pokud se tomuto modulu podaří přihlásit, autentizace se bere jako splněná a vrací se zpět do aplikace. Pokud ne, pokračuje se dalšími LoginModuly&lt;br /&gt;
* '''Optional''' – Pokračuje vždy k dalšímu LoginModulu, nezávisle na výsledku autentizace&lt;br /&gt;
&lt;br /&gt;
== Zdroje ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Článek z Wikipedie}}&lt;br /&gt;
[[Kategorie:Java]]&lt;/div&gt;</summary>
		<author><name>Sysop</name></author>	</entry>

	</feed>