JAAS
A Java2 SDK SE 1.4-nek rengeteg újítása volt, ezek közül egy csoport a biztonsági újdonságok. Több API-t is integráltak a fejlesztőkörnyezetbe, mint a Java Cryptography Extension (JCE), Java Secure Socket Extension (JSSE), és Java Authentication and Authorization Service (JAAS), melyek előzőleg opcionális csomagok voltak. Ez utóbbiról szeretnék most írni, melynek két fő része a nevéből is kitatálható, autentikáció és autorizáció.
Az előző verziókban biztonsági korlátozásokat csak az alapján lehetett felállítani, hogy az adott kód honnan származik (honnan lett letöltve), alá van-e írva, és ha igen, akkor ki által. Ezekre lehetett megszabni, hogy mely erőforrásokhoz férhet hozzá, és melyekhez nem. A JAAS emellé bevezette a felhasználó szintű autentikációt és hozzáférés vezérlést. A szabványos Pluggable Authentication Module (PAM) keretrendszer Java megvalósítása ez, mely egy API, ami elfedi a felhasználói programok elöl a különböző autentikációs technológiákat, és egységes autentikációs felületet nyújt, így egyszerű konfigurációval egyszerre több autentikációs modul használható, illetve kicserélhető az egyik a másikra.
A JAAS Subject-nek nevezi a felhasználót, szolgáltatást vagy gépet, mely hozzá akar férni egy szolgáltatáshoz. Ugyanaz a Subject más neveken férhet hozzá különböző szolgáltatásokhoz, ezeket a neveket reprezentálja a Principal fogalom. Egy Subjecthez így több Principal tartozhat. A Principal sikeres autentikációval rendelődik hozzá a Subjecthez. Az autentikáció az a biztonságos folyamat, melynél a Subject igazolja az identitását, vagy egy olyan információval, melyet csak ő tud (jelszó, ujjlenyomat), vagy egy olyannal, melyet csak ő tud produkálni (privát kulccsal aláírt adat). A Credential single sign-on környezetben használt fogalom, és a Subject-hez társított biztonsággal kapcsolatos tulajdonságok halmaza, pl. más szolgáltatáshoz való hozzáféréshez szükséges információk, pl. jelszavak, Kerberos ticketek, nyilvános kulcsú bizonyítványok (X.509, PGP, stb.). A Credential nem feltétlenül tartalmazza ezeket az adatokat, egyszerűen tartalmazhat rájuk hivatkozásokat, mikor az adat más szerveren vagy hardver elemen (smart card) van. Az ilyen tulajdonságoknak két csoportja van, publikus és privát adatok.
A kliens a LoginContext
-en keresztül kommunikál a JAAS-sal, mely a
Configuration
alapján példányosítja és hívja a LoginModule
-okat,
melyek az autentikációt valósítják meg. A Configuration
módosításával
lehetséges egy LoginModule
kicserélése az alkalmazás módosítása
nélkül. A LoginModule
egy Callback
-et ad vissza a kliensnek, mely
definiálja, hogy mit kell bekérni a felhasználótól. Ezt egy
CallbackHandler
-rel kell kezelni, mely a felveszi a tényleges
kapcsolatot a felhasználóval. A LoginModule
-t írhatunk sajátot, vagy
felhasználhatunk előre beépítettet, mely adott JNDI-hez, KeyStore-hoz,
Kerberoshoz, UNIX rendszerekhez. Az autentikáció két lépésben történik,
az első lépésben (login) minden LoginModule
-nak ellenőriznie kell a
belépést, ha minden sikerült, a második lépésben (commit) véglegesíti
azt. Ez utóbbi lépésben történik a Principalok és Credentialök
hozzáfűzése a Subjecthez.
A JAAS azt a konvencionális hozzáférési vezérlést követi, hogy definiál
védett erőforrások csoportjait, és meghatározza, mely Principalok
férhetnek hozzá ezen csoportokhoz. Ennek meghatározása a Javaban
korábban már jelenlévő policy fájlal történik, melynek szintaktikáját
kibővítették a felhasználó kezeléssel. A JAAS a csoportokat és
szerepeket mint Principal kezeli. A PrincipalComparator
-on keresztül
szerephierarchiát lehet felépíteni. Az erőforrásokhoz való hozzáférést a
SecurityManager
-ek vezérlik, melyek ezt a feladatot delegálják a
AccessController
-eknek, melyek a megkapott AccessControlContext
-ból
kinyerik, hogy van-e jog az adott tevékenységre. A Subject doAs
vagy
doAsPrivileged
metódusával lehet meghívni azt a kódot, melyet egy
Subjectként futtatni fog. Át kell neki adni a Subjectet, magát az
Action
-t, mely run metódusa tartalmazza a kódot, illetve az
AccessControlContext
-et.
Egy remek tutorial olvasható erről a Sun-nál.