Java Authentication and Authorization Service

Part 1 (Work in Progress)

barthel (https://github.com/barthel)

Einführung

  • Java-API um Dienste zur Authentifizierung und Autorisierung in Java Anwendungen bereitzustellen

  • Implementiert das Pluggable Authentication Modules (PAM) Konzept [PAM].

  • Seit Java 1.4 Teil der Platform.

Wikipedia (de): Java Authentication and Authorization Service. https://de.wikipedia.org/wiki/Java_Authentication_and_Authorization_Service (abgerufen am 14. Jan. 2020)

Java Authentication and Authorization Service

  • Verifizierung einer Entität (bspw. ein Mensch oder Gerät)

  • Synonym für Prüfung (Authentifikation) und Bezeugung (Authentifizierung) der Echtheit

  • Zuverlässig und sicher feststellen, wer gerade Java-Code ausführt [1].

Klassen und Interfaces

  • gebündelt in package javax.security.auth

  • Basisklassen

    • javax.security.auth.Subject, javax.security.Principal, Credentials

  • Klassen für Authentifizierung

    • javax.security.auth.login.LoginContext,javax.security.auth.login.Configuration, javax.security.auth.spi.LoginModule, javax.security.auth.callback.CallbackHandler, javax.security.auth.callback.Callback, java.security.AccessControlContext

Basisklassen und Interfaces

javax.security.auth.Subject

  • Quelle einer Anfrage

  • vertritt jedwede Entity (bspw. Mensch, Gerät)

  • Verwaltet Identitäten (Principal) sowie Anmeldeinformationen (Credential)

    • Anmeldeinformationen werden in öffentliche und private Informationen unterschieden.

  • Kann eingefroren (read-only) werden

  • wird in der Regel automatisch erzeugt

javax.security.Principal

  • Repräsentation einer Identität

  • Implementierung muss java.io.Serializable implementieren

Credentials

  • Anmeldeinformationen bspw. Rollen oder Rechte

  • keine eigene Klassenhierarchie

  • java.lang.Object

  • Implementierung muss java.io.Serializable implementieren

  • Implementierung von javax.security.auth.Refreshable für zeitabhängige Anmeldeinformationen

  • Implementierung von javax.security.auth.Destroyable für sensible Informationen

Klassen und interfaces für Authentifizierung

javax.security.auth.login.LoginContext

  • Schnittstelle zur anwendungsspezifischen Authentifizierung

  • Erzeugt — wenn nötig — Subject

  • Erzeugt und führt die konfigurierten (Configuration) LoginModule aus

  • Stellt Callbackhandler für die LoginModule bereit

javax.security.auth.login.Configuration

  • Definiert, welche LoginModule für eine Anwendung augeführt werden

  • Jeder Eintrag hat einen eindeutigen Namen

  • Standardimplementierung Konfiguration über Datei

    • Konfiguration über Startparameter java.security.auth.login.config als URL.

 Login {
   com.sun.security.auth.module.UnixLoginModule required;
   com.sun.security.auth.module.Krb5LoginModule optional
                   useTicketCache="true"
                   ticketCache="${user.home}${/}tickets";
 };

JavaDoc von javax.security.auth.login.Configuration: https://docs.oracle.com/javase/8/docs/api/javax/security/auth/login/Configuration.html (abgerufen 14. Jan. 2020)

javax.security.auth.spi.LoginModule

  • Interface zur Implementierung unterschiedlicher Authentifizierungstechnologien/-mechanismen

  • Definierter Ablauf der Authentifizierung

public interface LoginModule {

    /**
     * Initialize this LoginModule.
     */
    void initialize(Subject subject, CallbackHandler callbackHandler, Map<String,?> sharedState, Map<String,?> options);

    /**
     * Method to authenticate a {@code Subject} (phase 1).
     */
    boolean login() throws LoginException;

    /**
     * Method to commit the authentication process (phase 2).
     */
    boolean commit() throws LoginException;

    /**
     * Method to abort the authentication process (phase 2).
     */
    boolean abort() throws LoginException;

    /**
     * Method which logs out a {@code Subject}.
     */
    boolean logout() throws LoginException;
}

javax.security.auth.callback.CallbackHandler

  • Verbindung von LoginModule zur Anwendung

  • Bereitstellen von anwendungs-, benutzerspezifische Anfragen, Anzeigen (Callback)

  • LoginModule muss Callback-Klassen kennen

public interface CallbackHandler {
    void handle(Callback[] callbacks) throws java.io.IOException, UnsupportedCallbackException;
}

javax.security.auth.callback.Callback

  • Interface für spezifische Callback Implementierung

  • Informationstranzfer zwischen Anwendung und LoginModule

  • Standardimplementierungen

    • javax.security.auth.callback.NameCallback, javax.security.auth.callback.PasswordCallback u.a.

java.security.AccessControlContext

Literaturverzeichnis