Interface Authentication

  • All Known Implementing Classes:
    ConfigAuthentication

    public interface Authentication
    Dieses Interface stellt Methoden zur Verfügung, mit der sich ein Benutzer Authentifizieren und Verwaltungsaufgaben anstossen kann.

    Die Methode isValidUser(java.lang.String, byte[], java.lang.String, java.lang.String) prüft ob eine übergebene Benutzer/Passwort kombination gültig ist.

    Die Methode processTask(java.lang.String, byte[], java.lang.String) beauftragt die Konfiguration eine der folgenden Aufträge auszuführen:
    - Neuer Benutzer anlegen
    - Einmal-Passwort erzeugen
    - Rechte eines Benutzers ändern
    - Passwort eines Benuzters ändern

    Alle Informationen die für die oben genannten Aufgaben benötigt werden, werden verschlüsselt übertragen.

    Die Methode getText() liefert einen Zufallstext. Der Zufallstext wird beöntigt um "Reply-Attacken" (verschicken von Kopien bestimmter Telegramme) zu verhindern. Dieser Text muss in allen Telegrammen, die für die processTask(java.lang.String, byte[], java.lang.String) Methode benötigt werden, verschlüsselt übertragen werden. Danach darf der verschlüsselt übertragenen Text nicht mehr für andere Aufgaben funktionieren.

    • Method Summary

      Modifier and Type Method Description
      void changeUserPassword​(java.lang.String username, java.lang.String userNameForPasswordChange, java.lang.String newPassword)
      Setzt bei einem Benutzer das Passwort neu.
      void changeUserRights​(java.lang.String username, java.lang.String usernameChangeRights, boolean newUserRights)  
      void clearSingleServingPasswords​(java.lang.String orderer, java.lang.String username)
      Löscht für einen angegebenen Benutzer alle Einmalpasswörter bzw. markiert diese als ungültig.
      void close()
      Diese Methode wird aufgerufen, wenn das System heruntergefahren wird.
      int countRemainingSingleServingPasswords​(java.lang.String orderer, java.lang.String username)
      Zählt die verbleibenden Einmalpasswörter für einen angegeben Benutzer.
      void createNewUser​(java.lang.String usernameCustomer, de.bsvrz.sys.funclib.dataSerializer.Deserializer deserializer)
      Erstellt einen neuen Benutzer
      void createNewUser​(java.lang.String username, java.lang.String newUserName, java.lang.String newUserPid, java.lang.String newUserPassword, boolean admin, java.lang.String configurationArea, java.util.Collection<de.bsvrz.dav.daf.main.DataAndATGUsageInformation> data)
      Legt einen neuen Benutzer mit den übergebenen Parametern an.
      void createSingleServingPassword​(java.lang.String username, java.lang.String usernameSingleServingPasswort, java.lang.String passwortSingleServingPasswort)  
      void deleteUser​(java.lang.String username, java.lang.String userToDelete)
      Löscht einen angegebenen Benutzer.
      void disableSingleServingPassword​(java.lang.String authenticatedUser, java.lang.String usernamePassword, int passwordIndex)
      Markiert eine Einmalpasswort als ungültig
      int[] getRemainingSingleServingPasswordIDs​(java.lang.String orderer, java.lang.String username)
      Gibt die verbleibenden gültigen Einmalpasswort-IDs für einen angegeben Benutzer zurück.
      de.bsvrz.dav.daf.communication.srpAuthentication.SrpVerifierAndUser getSrpVerifierData​(java.lang.String authenticatedUser, java.lang.String username, int passwordIndex)
      Gibt die dem angegebenen Benutzer den gespeicherten SRP-Überprüfungscode (Verifier, v) zurück, mit dem jemand überprüfen kann, ob der Benutzer sein Passwort weiß, ohne das der überprüfende selbst das Passwort wissen muss.
      byte[] getText()
      Deprecated.
      Diese Methode wird von der alten HMAC-basierten Benutzerverwaltung benutzt und ist bei SRP nicht mehr sinnvoll.
      de.bsvrz.dav.daf.main.config.SystemObject getUserObject​(java.lang.String userName)
      Gibt zu einem Benutzernamen das Benutzerobjekt zurück, falls es existiert.
      boolean isUser​(java.lang.String userToCheck)
      Prüft, ob ein Benutzer existiert
      boolean isUserAdmin​(java.lang.String orderer, java.lang.String userToCheck)
      Prüft ob ein Benutzer Adminrechte hat.
      void isValidUser​(java.lang.String username, byte[] encryptedPassword, java.lang.String authentificationText, java.lang.String authentificationProcessName)
      Deprecated.
      Diese Methode wird von der alten HMAC-Authentifizierung ohne Verschlüsselung benutzt
      int processTask​(java.lang.String usernameCustomer, byte[] encryptedMessage, java.lang.String encryptionProcessName)
      Deprecated.
      Diese Methode wird von der alten HMAC-basierten Benutzerverwaltung benutzt und ist bei SRP nicht mehr sinnvoll.
      int setOneTimePasswords​(java.lang.String authenticatedUser, java.lang.String usernamePassword, java.util.List<java.lang.String> passwords, boolean append)  
    • Method Detail

      • isValidUser

        @Deprecated
        void isValidUser​(java.lang.String username,
                         byte[] encryptedPassword,
                         java.lang.String authentificationText,
                         java.lang.String authentificationProcessName)
                  throws java.lang.Exception,
                         java.lang.IllegalArgumentException
        Deprecated.
        Diese Methode wird von der alten HMAC-Authentifizierung ohne Verschlüsselung benutzt
        Die Implementierung dieser Methode stellt die Authentifizierung des Benutzers sicher. Dafür wird das original Passwort mit dem übergebenen authentificationText verschlüsselt und mit dem übergebenen verschlüsselten Passwort verglichen. Sind beide Passwörter gleich, und der übergebene Benutzername stimmt mit dem Benutzernamen des original Passworts überein, so war die Authentifikation erfolgreich.

        Konnte das original Passwort nicht benutzt werden, muss geprüft werden, ob es ein Einmal-Passwort gibt. Das Einmal-Passwort muss das derzeit aktuell gültige sein und muss mit dem übergebenen verschlüsseltem Passwort übereinstimmen. Gibt es ein entsprechendes Einmal-Passwort, so ist es für immer zu sperren.

        Konnte kein Passwort gefunden werden, wird eine IllegalArgumentException geworfen.

        Parameters:
        username - Benutzername, der zu dem übergebenen verschlüsselten Passwort gehört
        encryptedPassword - Passwort, das mit dem übergebenen Text authentificationText verschlüsselt wurde
        authentificationText - Text, der benutzt wurde um das übergebene Passwort encryptedPassword zu verschlüsseln
        authentificationProcessName - Name des Verschlüsslungsverfahren, das benutzt wurde. Mit diesem Verfahren wird das Originalpasswort verschlüsselt
        Throws:
        java.lang.Exception - Fehler beim schreiben der neuen Informationen oder ein technisches Problem beim verschlüsseln der Daten
        java.lang.IllegalArgumentException - Dem Benutzernamen konnte das Passwort nicht zugeordnet werden oder der Benutzer war unbekannt
      • processTask

        @Deprecated
        int processTask​(java.lang.String usernameCustomer,
                        byte[] encryptedMessage,
                        java.lang.String encryptionProcessName)
                 throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                        de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Deprecated.
        Diese Methode wird von der alten HMAC-basierten Benutzerverwaltung benutzt und ist bei SRP nicht mehr sinnvoll. Diese Methode funktioniert nur, wenn das Passwort im Klartext gespeichert ist.
        Bearbeitet eine der folgenden Aufgaben:
        - Neuer Benutzer anlegen
        - Einmal-Passwort erzeugen
        - Rechte eines Benutzers ändern
        - Passwort eines Benutzers ändern
        - Anzahl der Einmalpasswörter ermitteln
        - Einmalpasswörter löschen
        - Benutzer löschen
        - Abfrage nach Existenz und Adminstatus eines Benutzers
        Parameters:
        usernameCustomer - Benutzer, der den Auftrag erteilt
        encryptedMessage - verschlüsselte Aufgabe, die ausgeführt werden soll
        encryptionProcessName - Verschlüsslungsverfahren mit der encryptedMessage erstellt wurde
        Returns:
        Rückmeldung der durchgeführten Aufgabe, beispielsweise die Anzahl der verbleibenden Einmalpasswörter, falls danach gefragt wurde. -1 bei Aufgaben ohne Rückgabewert.
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Der Auftrag, der durch die Konfiguration ausgeführt werden sollte, konnte nicht durchgeführt werden, weil bestimmte Parameter nicht erfüllt waren. Welche Parameter dies genau sind, hängt vom jeweiligen Auftrag ab, so kann zum Beispiel ein Passwort fehlerhaft gewesen sein oder der Benutzer besitzt nicht die nötigen Rechte um einen Auftrag dieser Art anzustoßen. Wenn der Auftrag erneut übermittelt werden würde, mit den richtigen Parametern, könnte er ausgeführt werden.
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Der Auftrag konnte aufgrund eines technischen Fehlers nicht ausgeführt werden (defektes Speichermedium, Fehler im Dateisystem, usw.). Erst wenn dieser Fehler behoben ist, können weitere Aufträge ausgeführt werden.
      • getText

        @Deprecated
        byte[] getText()
        Deprecated.
        Diese Methode wird von der alten HMAC-basierten Benutzerverwaltung benutzt und ist bei SRP nicht mehr sinnvoll.
        Erzeugt einen Zufallstext und gibt diesen als Byte-Array zurück.
        Returns:
        Zufallstext
      • close

        void close()
        Diese Methode wird aufgerufen, wenn das System heruntergefahren wird. Es ist ein Zustand herzustellen, der es ermöglicht das System wieder zu starten.
      • createNewUser

        void createNewUser​(java.lang.String usernameCustomer,
                           de.bsvrz.sys.funclib.dataSerializer.Deserializer deserializer)
                    throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                           de.bsvrz.dav.daf.main.impl.config.request.RequestException,
                           java.io.IOException
        Erstellt einen neuen Benutzer
        Parameters:
        usernameCustomer - Auftraggeber
        deserializer - Serialisierte Daten zu dem Benutzer
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        de.bsvrz.dav.daf.main.impl.config.request.RequestException
        java.io.IOException
      • isUser

        boolean isUser​(java.lang.String userToCheck)
        Prüft, ob ein Benutzer existiert
        Parameters:
        userToCheck - Benutzername
        Returns:
        true wenn er existiert, sonst false
      • clearSingleServingPasswords

        void clearSingleServingPasswords​(java.lang.String orderer,
                                         java.lang.String username)
                                  throws java.io.FileNotFoundException,
                                         de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Löscht für einen angegebenen Benutzer alle Einmalpasswörter bzw. markiert diese als ungültig. Nur ein Admin und der Benutzer selbst darf diese Aktion ausführen.
        Parameters:
        orderer - Der Auftraggeber der Aktion
        username - Der Benutzer, dessen Einmalpasswörter gelöscht werden sollen
        Throws:
        java.io.FileNotFoundException
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
      • countRemainingSingleServingPasswords

        int countRemainingSingleServingPasswords​(java.lang.String orderer,
                                                 java.lang.String username)
                                          throws java.io.FileNotFoundException,
                                                 de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Zählt die verbleibenden Einmalpasswörter für einen angegeben Benutzer. Nur ein Admin und der Benutzer selbst darf diese Aktion ausführen.
        Parameters:
        orderer - Der Auftraggeber der Aktion
        username - Der Benutzer, dessen Einmalpasswörter gezählt werden sollen
        Returns:
        Die Anzahl der verbliebenen Einmalpasswörter
        Throws:
        java.io.FileNotFoundException
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
      • getRemainingSingleServingPasswordIDs

        int[] getRemainingSingleServingPasswordIDs​(java.lang.String orderer,
                                                   java.lang.String username)
                                            throws java.io.FileNotFoundException,
                                                   de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Gibt die verbleibenden gültigen Einmalpasswort-IDs für einen angegeben Benutzer zurück. Nur ein Admin und der Benutzer selbst darf diese Aktion ausführen.
        Parameters:
        orderer - Der Auftraggeber der Aktion
        username - Der Benutzer, dessen Einmalpasswörter gezählt werden sollen
        Returns:
        Die IDs der verbliebenen Einmalpasswörter
        Throws:
        java.io.FileNotFoundException
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
      • isUserAdmin

        boolean isUserAdmin​(java.lang.String orderer,
                            java.lang.String userToCheck)
                     throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Prüft ob ein Benutzer Adminrechte hat. Jeder Benutzer darf diese Aktion ausführen.
        Parameters:
        orderer - Der Auftraggeber der Aktion. Wird in dieser Funktion derzeit nicht berücksichtigt, da jeder diese Abfrage ausführen darf
        userToCheck - Der Benutzer, dessen Rechte geprüft werden sollen.
        Returns:
        True falls der Benutzer ein Admin ist
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Der Auftrag kann nicht ausgeführt werden, weil der Benutzer nicht existiert
      • createSingleServingPassword

        void createSingleServingPassword​(java.lang.String username,
                                         java.lang.String usernameSingleServingPasswort,
                                         java.lang.String passwortSingleServingPasswort)
                                  throws de.bsvrz.dav.daf.main.impl.config.request.RequestException,
                                         de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Parameters:
        username - Benutzer, der den Auftrag angestoßen hat
        usernameSingleServingPasswort - Benutzer für den das Einmal-Passwort gedacht ist
        passwortSingleServingPasswort - Einmal-Passwort
        Throws:
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Technischer Fehler, der Auftrag konnte nicht bearbeitet werden.
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Die Konfiguration weigert sich den Auftrag auszuführen weil z.b. das Passwort falsch war, der Benutzer nicht die nötigen Rechte besitzt usw..
      • createNewUser

        void createNewUser​(java.lang.String username,
                           java.lang.String newUserName,
                           java.lang.String newUserPid,
                           java.lang.String newUserPassword,
                           boolean admin,
                           java.lang.String configurationArea,
                           java.util.Collection<de.bsvrz.dav.daf.main.DataAndATGUsageInformation> data)
                    throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                           de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Legt einen neuen Benutzer mit den übergebenen Parametern an.
        Parameters:
        username - Benutzer, der den Auftrag erteilt
        newUserName - Name des neuen Benutzers
        newUserPassword - Passwort des neuen Benutzers
        admin - Rechte des neuen Benutzers (true = Adminrechte; false = normaler Benutzerrechte)
        newUserPid - Pid, die der neue Benutzer erhalten soll. Wird ein Leerstring ("") übergeben, so bekommt der Benutzer keine expliziete Pid
        configurationArea - Pid des Konfigurationsbereichs, in dem der neue Benutzer angelegt werden soll
        data - Konfigurierende Datensätze, die angelegt werden sollen (falls leere Liste oder null werden keine Daten angelegt)
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Der neue Benutzer durfte nicht angelegt werden (Keine Rechte, Benutzer bereits vorhanden)
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - technischer Fehler beim Zugriff auf die XML-Datei
        See Also:
        ConfigurationArea.createDynamicObject(de.bsvrz.dav.daf.main.config.DynamicObjectType, String, String, java.util.Collection)
      • changeUserPassword

        void changeUserPassword​(java.lang.String username,
                                java.lang.String userNameForPasswordChange,
                                java.lang.String newPassword)
                         throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                                de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Setzt bei einem Benutzer das Passwort neu. Dies kann entweder ein Admin bei einem anderen Benutzerkonto oder ein Benutzer bei seinem eigenen Benutzerkonto.

        Ist für einen Benutzer nur das Objekt des Benutzers in der Konfiguration vorhanden, aber das Benutzerkonto fehlt, wird das Benutzerkonto mit createNewUser(java.lang.String, de.bsvrz.sys.funclib.dataSerializer.Deserializer) angelegt. Das neue Benutzerkonto besitzt dabei keine Adminrechte. Das neue Benutzerkonto wird dabei das Passwort erhalten, das neu gesetzt werden sollte.

        Gibt es zwar ein Benutzerkonto, aber kein Objekt in der Konfiguration, wird ein Fehler ausgegeben.

        Sind weder Objekt noch Benutzerkonto vorhanden wird ein Fehler ausgegeben.

        Parameters:
        username - Benutzer, der den Auftrag zum ändern des Passworts erteilt hat
        userNameForPasswordChange - Benutzer, dessen Passwort geändert werden soll
        newPassword - neues Passwort
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Der Benutzer ist unbekannt oder es gibt zu dem Benutzer kein entsprechendes Objekt oder der Benutzer darf das Passwort nicht ändern (kein Admin oder der Besitzer des Passwords).
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Fehler beim Zugriff auf die XML-Datei
      • changeUserRights

        void changeUserRights​(java.lang.String username,
                              java.lang.String usernameChangeRights,
                              boolean newUserRights)
                       throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                              de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Parameters:
        username - Benutzer, der den Auftrag erteilt hat (dieser muss Adminrechte besitzen)
        usernameChangeRights - Benutzer, dessen Rechte geändert werden soll
        newUserRights - Neue Rechte des Benutzers (true = Admin-Rechte, false = normaler Benutzerrechte
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Der Benutzer ist unbekannt oder der Auftraggeber besitzt nicht die nötigen Rechte
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Fehler beim Zugriff auf die XML-Datei
      • deleteUser

        void deleteUser​(java.lang.String username,
                        java.lang.String userToDelete)
                 throws de.bsvrz.dav.daf.main.impl.config.request.RequestException,
                        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Löscht einen angegebenen Benutzer. Diese Aktion kann nur von Administratoren ausgeführt werden.
        Parameters:
        username - Veranlasser der Aktion
        userToDelete - Benutzername des Benutzers, der gelöscht werden soll
        Throws:
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Das Löschen kann aufgrund eines Problems nicht durchgeführt werden
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Die Anfrage ist fehlerhaft weil der Veranlasser nicht die nötigen Rechte hat oder der zu löschende Benutzer nicht existiert
      • getSrpVerifierData

        de.bsvrz.dav.daf.communication.srpAuthentication.SrpVerifierAndUser getSrpVerifierData​(java.lang.String authenticatedUser,
                                                                                               java.lang.String username,
                                                                                               int passwordIndex)
                                                                                        throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        Gibt die dem angegebenen Benutzer den gespeicherten SRP-Überprüfungscode (Verifier, v) zurück, mit dem jemand überprüfen kann, ob der Benutzer sein Passwort weiß, ohne das der überprüfende selbst das Passwort wissen muss.
        Parameters:
        authenticatedUser - Benutzer, der die Anfrage durchführt. Die Anfrage dürfen nur Administratoren durchführen, andere Benutzer dürfen nur für sich selbst den Verifier abfragen.
        username - Benutzername, dessen SRP-Verifier abgefragt wird
        passwordIndex -
        Returns:
        Überprüfungscode und Meta-Informationen
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
      • setOneTimePasswords

        int setOneTimePasswords​(java.lang.String authenticatedUser,
                                java.lang.String usernamePassword,
                                java.util.List<java.lang.String> passwords,
                                boolean append)
                         throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                                de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Parameters:
        authenticatedUser - Benutzer, der den Auftrag angestoßen hat
        usernamePassword - Benutzer für den die Einmal-Passwörter gedacht sind
        passwords - Einmal-Passwörter
        append - Passwörter anhängen (falls nicht, bestehende Passwörter vorher löschen)
        Returns:
        Index des ersten angehängten Passworts
        Throws:
        de.bsvrz.dav.daf.main.impl.config.request.RequestException - Technischer Fehler, der Auftrag konnte nicht bearbeitet werden.
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Die Konfiguration weigert sich den Auftrag auszuführen weil z.b. das Passwort falsch war, der Benutzer nicht die nötigen Rechte besitzt usw..
      • disableSingleServingPassword

        void disableSingleServingPassword​(java.lang.String authenticatedUser,
                                          java.lang.String usernamePassword,
                                          int passwordIndex)
                                   throws de.bsvrz.dav.daf.main.config.ConfigurationTaskException,
                                          de.bsvrz.dav.daf.main.impl.config.request.RequestException
        Markiert eine Einmalpasswort als ungültig
        Parameters:
        authenticatedUser - Authentifizierter Benutzer
        usernamePassword - Benutzer, dssen Passwort als ungültig markiert werden soll
        passwordIndex - Index des Einmalpassworts
        Throws:
        de.bsvrz.dav.daf.main.config.ConfigurationTaskException
        de.bsvrz.dav.daf.main.impl.config.request.RequestException
      • getUserObject

        de.bsvrz.dav.daf.main.config.SystemObject getUserObject​(java.lang.String userName)
        Gibt zu einem Benutzernamen das Benutzerobjekt zurück, falls es existiert. Gibt es kein Objekt mit dem Benutzernamen wird `null` zurückgegeben. Gibt es mehrere Benutzerobjekte, dann wird eins davon ausgewählt, wobei Objekte der lokalen AOE bevorzugt werden und, sollte es dann immer noch mehrdeutigkeiten geben, Objekte die nach Pid am Anfang sortiert werden würden.
        Parameters:
        userName - Benutzername
        Returns:
        SystemObject (typ.benutzer) oder `null`