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.