Class ConfigAuthentication

java.lang.Object
de.bsvrz.puk.config.main.authentication.ConfigAuthentication
All Implemented Interfaces:
Authentication

public class ConfigAuthentication
extends java.lang.Object
implements Authentication
Diese Klasse stellt alle Methoden zur Verfügung, um die Benutzer eines Datenverteilers eindeutig zu identifizieren. Es werden weitere Methoden zur Verfügung gestellt, um die Benutzer zu verwalten (anlegen neuer Benutzer, Passwörter ändern, usw.).

Die Klasse verwaltet selbstständig die Datei, in der die Benutzer mit ihrem Passwörtern (normales Passwort und Einmal-Passwörter) und ihren Rechten gespeichert sind.

Der Klasse werden nur verschlüsselte Aufträge übergeben und sie entschlüsselt diese automatisch und führt die Aufträge aus, falls der Benutzer die nötigen Rechte besitzt.

  • Constructor Summary

    Constructors
    Constructor Description
    ConfigAuthentication​(java.io.File userFile, de.bsvrz.dav.daf.main.config.DataModel dataModel)
    Lädt alle Informationen aus der angegebenen Datei.
  • 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 createBackupFile​(java.io.File targetDirectory)
    Sicher die Benutzerverwaltungsdatei in das angegebene Verzeichnis
    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.
    de.bsvrz.dav.daf.communication.protocol.UserLogin getUserLogin​(java.lang.String userName)  
    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.
    int processTask​(java.lang.String usernameCustomer, byte[] encryptedMessage, java.lang.String authentificationProcessName)
    Deprecated.
    int setOneTimePasswords​(java.lang.String authenticatedUser, java.lang.String usernamePassword, java.util.List<java.lang.String> passwords, boolean append)  
    java.lang.String toString()  

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
  • Constructor Details

    • ConfigAuthentication

      public ConfigAuthentication​(java.io.File userFile, de.bsvrz.dav.daf.main.config.DataModel dataModel) throws javax.xml.parsers.ParserConfigurationException
      Lädt alle Informationen aus der angegebenen Datei. Ist die Datei nicht vorhanden, wird eine Datei mit allen Grundeinstellungen erzeugt.
      Parameters:
      userFile - XML-Datei, in der alle Benutzer gespeichert sind.
      Throws:
      javax.xml.parsers.ParserConfigurationException
  • Method Details

    • isValidUser

      @Deprecated public void isValidUser​(java.lang.String username, byte[] encryptedPassword, java.lang.String authentificationText, java.lang.String authentificationProcessName) throws java.lang.Exception
      Deprecated.
      Description copied from interface: Authentication
      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.

      Specified by:
      isValidUser in interface Authentication
      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
    • getText

      @Deprecated public byte[] getText()
      Deprecated.
      Description copied from interface: Authentication
      Erzeugt einen Zufallstext und gibt diesen als Byte-Array zurück.
      Specified by:
      getText in interface Authentication
      Returns:
      Zufallstext
    • close

      public void close()
      Description copied from interface: Authentication
      Diese Methode wird aufgerufen, wenn das System heruntergefahren wird. Es ist ein Zustand herzustellen, der es ermöglicht das System wieder zu starten.
      Specified by:
      close in interface Authentication
    • toString

      public java.lang.String toString()
      Overrides:
      toString in class java.lang.Object
    • processTask

      @Deprecated public int processTask​(java.lang.String usernameCustomer, byte[] encryptedMessage, java.lang.String authentificationProcessName) throws de.bsvrz.dav.daf.main.impl.config.request.RequestException, de.bsvrz.dav.daf.main.config.ConfigurationTaskException
      Deprecated.
      Führt einen Auftrag der Benutzerverwaltung aus und entschlüsselt dabei das übergebene Byte-Array
      Specified by:
      processTask in interface Authentication
      Parameters:
      usernameCustomer - Benutzer, der den Auftrag erteilt
      encryptedMessage - verschlüsselte Aufgabe, die ausgeführt werden soll
      authentificationProcessName - Entschlüsselungsverfahren
      Returns:
      Die Rückgabe des ausgeführten Tasks (beispielsweise die Anzahl der verbleibenden Einmalpasswörter, falls danach gefragt wurde. ConfigAuthentication.UserAccount.NO_RESULT (-1) falls die Aufgabe keine Rückgabe liefert.
      Throws:
      de.bsvrz.dav.daf.main.impl.config.request.RequestException - Fehler in der Anfrage
      de.bsvrz.dav.daf.main.config.ConfigurationTaskException - Fehler beim Ausführen der Anweisung
    • createNewUser

      public 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
      Description copied from interface: Authentication
      Erstellt einen neuen Benutzer
      Specified by:
      createNewUser in interface Authentication
      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

      public boolean isUser​(java.lang.String userToCheck)
      Description copied from interface: Authentication
      Prüft, ob ein Benutzer existiert
      Specified by:
      isUser in interface Authentication
      Parameters:
      userToCheck - Benutzername
      Returns:
      true wenn er existiert, sonst false
    • clearSingleServingPasswords

      public 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.
      Specified by:
      clearSingleServingPasswords in interface Authentication
      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

      public 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.
      Specified by:
      countRemainingSingleServingPasswords in interface Authentication
      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

      public 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.
      Specified by:
      getRemainingSingleServingPasswordIDs in interface Authentication
      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

      public 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.
      Specified by:
      isUserAdmin in interface Authentication
      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

      public 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
      Specified by:
      createSingleServingPassword in interface Authentication
      Parameters:
      username - Benutzer, der den Auftrag angestossen 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

      public 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.
      Specified by:
      createNewUser in interface Authentication
      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 explizite 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 anglegt 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(DynamicObjectType, String, String, Collection)
    • changeUserPassword

      public 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.

      Specified by:
      changeUserPassword in interface Authentication
      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

      public 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
      Specified by:
      changeUserRights in interface Authentication
      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

      public 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.
      Specified by:
      deleteUser in interface Authentication
      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

      public 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
      Description copied from interface: Authentication
      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.
      Specified by:
      getSrpVerifierData in interface Authentication
      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
      Returns:
      Überprüfungscode und Meta-Informationen
      Throws:
      de.bsvrz.dav.daf.main.config.ConfigurationTaskException
    • setOneTimePasswords

      public 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
      Specified by:
      setOneTimePasswords in interface Authentication
      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.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..
      de.bsvrz.dav.daf.main.impl.config.request.RequestException - Technischer Fehler, der Auftrag konnte nicht bearbeitet werden.
    • disableSingleServingPassword

      public 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
      Description copied from interface: Authentication
      Markiert eine Einmalpasswort als ungültig
      Specified by:
      disableSingleServingPassword in interface Authentication
      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
    • getUserLogin

      public de.bsvrz.dav.daf.communication.protocol.UserLogin getUserLogin​(java.lang.String userName)
    • getUserObject

      public de.bsvrz.dav.daf.main.config.SystemObject getUserObject​(java.lang.String userName)
      Description copied from interface: Authentication
      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.
      Specified by:
      getUserObject in interface Authentication
      Parameters:
      userName - Benutzername
      Returns:
      SystemObject (typ.benutzer) oder `null`
    • createBackupFile

      public void createBackupFile​(java.io.File targetDirectory) throws java.io.IOException
      Sicher die Benutzerverwaltungsdatei in das angegebene Verzeichnis
      Parameters:
      targetDirectory - Zielverzeichnis
      Throws:
      java.io.IOException - IO-Fehler