Token-Authentifizierung

Die Token-Authentifizierung ermöglicht es Benutzern, mithilfe von Access Tokens Zugang zum System zu erhalten. Die Token können vom Benutzer in seinem Benutzermenü erstellt werden. Jedem Token können eine oder mehrere Zugriffsberechtigungen zugewiesen werden.

Access Tokens sind ein alternatives Authentifizierungsmittel, das den Zugriff auf URL-Pfad-Erweiterungen des INETAPP Servers ermöglicht. Ein einmal generiertes Access Token wird dem Benutzer nicht noch einmal angezeigt, daher muss es kopiert und sicher aufbewahrt werden. Es ist möglich, ein Token neu zu generieren - ohne die Berechtigungen zu verlieren - falls dieses kompromittiert wurde oder verloren ging.

URL-Pfad-Erweiterungen werden durch zusätzliche Plugins definiert, z.B. durch die Web-API. Benutzer mit der Berechtigung Token Authentication können mehrere Pfaderweiterungen auswählen, auf die mit einem bestimmten Access Token zugegriffen werden kann.

Es gibt zwei Arten von Token, die unterstützt werden:

Hinweis: Access Token erweitern nicht die Privilegien, die ein Benutzer aufgrund seiner Berechtigungen im System erhalten hat. Die Zugriffsbeschränkungen für die URL-Pfad-Erweiterung eines Access Token und die Rechte des Benutzers gelten gleichzeitig. Das bedeutet, alle Komponenten, auf die mit dem Access Token zugegriffen werden soll, müssen explizit unter 'Anwendungsberechtigungen' freigegeben werden.

Bearer Token

Ein Bearer Token wird für zustandslose Anfragen an den INETAPP-Server verwendet, z.B. über die Web API. Der Token-Schlüssel wird beim Anlegen eines neuen Bearer Token Eintrags automatisch generiert. Er wird dem Server über den Authorization-Header in der folgenden Form mitgeteilt:

# Request
GET /api/jobmanager HTTP/1.1
Authorization: Bearer 90fs7vt7ujdqubbbn01q34n9g65t4742gezdcwuyhcbcryqqye

Hinweis: Das Access Token besteht aus einer öffentlichen und einer privaten Komponente. Der öffentliche Teil, der aus den ersten 25 Zeichen besteht, kann für die Suche nach dem Benutzerkonto im Benutzer und Gruppen Manager verwendet werden.

HMAC-Token

Die HMAC Token-Authentifizierung basiert auf einem Hash-Schlüssel, der aus dem Secret Key und dem Inhalt der Anfrage erstellt wird. Das bedeutet, dass der geheime Schlüssel nie direkt vom Client zum Server übertragen wird, sondern beide Seiten den Schlüssel kennen müssen.

Normalerweise stellt die Dienstseite (auch Client genannt) den Schlüssel zur Verfügung, der in der Konfiguration des Benutzers eingerichtet werden muss.

Ein clientseitiger Java-Code könnte wie folgt aussehen:

    // Achtung, dieser Code muss angepasst werden!
    // Der HMAC Token "f1h3g4zt598d7t47hg3723j22b" ist nur exemplarisch.
    // Dieser wird Base64 kodiert angegeben und muss daher dekodiert werden.
    byte[] secretKey = Base64.getDecoder().decode( "f1h3g4zt598d7t47hg3723j22b" );
    String hmac = Base64.getEncoder().encodeToString( calcHmacSha256( secretKey, content ) );
    conn.setRequestProperty( "Authorization", "HMAC " + hmac );
    conn.setDoOutput( true );
    conn.setRequestProperty("content-type", "text/plain; charset=utf-8");
    conn.getOutputStream().write(  content );
    InputStream in = conn.getInputStream();
 
    static public byte[] calcHmacSha256(byte[] secretKey, byte[] message) {
        try {
            Mac mac = Mac.getInstance( "HmacSHA256");
            SecretKeySpec secretKeySpec = new SecretKeySpec( secretKey, "HmacSHA256");
            mac.init(secretKeySpec);
            return mac.doFinal(message);
        } catch (Exception e) {
            throw new RuntimeException("Failed to calculate hmac-sha256", e);
        }
    }