|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectde.bsvrz.puk.config.main.authentication.ConfigAuthentication
public class ConfigAuthentication
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.
Nested Class Summary | |
---|---|
private class |
ConfigAuthentication.ConfigAuthenticationEntityResolver
Implementierung eines EntityResolvers, der Referenzen auf den Public-Identifier "-//K2S//DTD Verwaltung//DE" ersetzt durch die verwaltungsdaten.dtd Resource-Datei in diesem Package. |
private class |
ConfigAuthentication.SingleServingPassword
Speichert alle Informationen zu einem "Einmal-Passwort" (Passwort, Index, "schon gebraucht") |
private class |
ConfigAuthentication.UserAccount
Diese Klasse Speichert alle Informationen, die zu Benutzerkonto gehören. |
Field Summary | |
---|---|
private DataModel |
_dataModel
Wird benötigt um bei den entsprechenden Konfigurationsbereichen neue Benutzer anzulegen |
private static Debug |
_debug
DebugLogger für Debug-Ausgaben |
private FileLock |
_lockAuthenticationFile
|
private LinkedList<String> |
_randomText
Diese Liste speichert alle Texte, die mit getText() erzeugt wurden. |
private URI |
_uriBase
Speichert die Basis der Verzeichnisse für die Konfigurationsbereiche. |
private Map<String,ConfigAuthentication.UserAccount> |
_userAccounts
Als Schlüssel dient der Benutzername (String) als Value werden alle Informationen, die zu einem Benutzer gespeichert wurden, zurückgegeben. |
private Document |
_xmlDocument
Repräsentiert die vollständige XML-Datei. |
private File |
_xmlFile
XML-Datei, wird zum anlagen einer Sicherheitskopie gebraucht |
Constructor Summary | |
---|---|
ConfigAuthentication(File userFile,
DataModel dataModel)
Lädt alle Informationen aus der angegebenen Datei. |
Method Summary | |
---|---|
private void |
changeUserPassword(String username,
String userNameForPasswordChange,
String newPassword)
Setzt bei einem Benutzer das Passwort neu. |
private void |
changeUserRights(String username,
String usernameChangeRights,
boolean newUserRights)
|
private void |
checkRandomText(byte[] randomText)
Prüft, ob der übergebene Text in der Liste der zufällig erzeugten Texte _randomText vorhanden ist. |
void |
close()
Diese Methode wird aufgerufen, wenn das System heruntergefahren wird. |
private void |
createNewUser(String username,
String newUserName,
String newUserPid,
String newUserPassword,
boolean admin,
String configurationArea)
Legt einen neuen Benutzer mit den übergebenen Parametern an. |
private void |
createSingleServingPassword(String username,
String usernameSingleServingPasswort,
String passwortSingleServingPasswort)
|
private void |
createUserObject(String pidConfigurationArea,
String username,
String pid)
Erzeugt ein Objekt vom Typ "typ.Benutzer". |
private void |
createUserXML(String newUserName,
String newUserPassword,
boolean admin)
Erzeugt einen neuen Benutzer im speicher und speichert diesen in einer XML-Datei. |
private Element |
createXMLSingleServingPasswort(String newPassword,
int passwortindex,
String usable)
Erzeugt ein XML Objekt, das einem Einmal-Passwort entspricht. |
private Element |
createXMLUserAccount(String name,
String password,
String admin)
Erzeugt ein XML Objekt, das einem Benutzerkonto entspricht. |
private void |
deleteUser(String username,
String encryptedUsername,
String encryptedPassword)
|
private Deserializer |
getDeserializer(byte[] encryptedMessage,
String decryptenText,
String authentificationProcessName)
Erzeugt einen Desirialisierer auf den mit den üblichen Methoden zugegriffen werden kann. |
private int |
getSerializerVersion(byte[] message)
Ließt aus einem Byte-Array die ersten 4 Bytes aus und erzeugt daraus die benutztes Serializerversion |
byte[] |
getText()
Erzeugt einen Zufallstext und gibt diesen als Byte-Array zurück. |
private boolean |
isAdmin(String username)
Prüft ob der Benutzer Admin-Rechte besitzt. |
private EncryptDecryptProcedure |
isEncryptDecryptProcedureAllowed(String usedEncryptDecryptProcedure)
Prüft, ob das Verfahren, das zum ver/entschlüsseln benutzt wurde, zugelassen ist. |
void |
isValidUser(String username,
byte[] encryptedPassword,
String authentificationText,
String authentificationProcessName)
Die Implementierung dieser Methode stellt die Authentifizierung des Benutzers sicher. |
void |
processTask(String usernameCustomer,
byte[] encryptedMessage,
String authentificationProcessName)
Bearbeitet eine der folgenden Aufgaben: - Neuer Benutzer anlegen - Einmal-Passwort erzeugen - Rechte eines Benutzers ändern - Passwort eines Benuzters ändern |
private void |
readUserAccounts()
Ließt alle Benutzer aus der XML-Datei ein und erzeugt entsprechende Java-Objekte. |
private byte[] |
removeFirst4Bytes(byte[] byteArray)
Entfernt die ersten 4 Bytes eines Byte-Arrays und gibt ein neues Array zurück, bei dem genau die ersten 4 Bytes fehlen. |
private void |
saveXMLFile()
Speichert alle Benutzerdaten in einer XML-Datei. |
private boolean |
userHasObject(String username,
String pid)
Prüft, ob es zu der Kombination Benutzername und Pid ein gültiges Objekt gibt. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Field Detail |
---|
private final Map<String,ConfigAuthentication.UserAccount> _userAccounts
private final File _xmlFile
private static final Debug _debug
private final Document _xmlDocument
private URI _uriBase
private final LinkedList<String> _randomText
getText()
erzeugt wurden. Die Texte werden immer an das Ender der Liste eingefügt. Wird ein Text empfangen,
wird dieser aus der Liste gelöscht.
Erreicht die eine bestimmte Größe, wird das erste Element gelöscht, da das erste Element am längsten in der Liste vorhanden ist.
Die Liste ist nicht synchronisiert.
private DataModel _dataModel
private final FileLock _lockAuthenticationFile
Constructor Detail |
---|
public ConfigAuthentication(File userFile, DataModel dataModel) throws ParserConfigurationException
userFile
- XML-Datei, in der alle Benutzer gespeichert sind.
ParserConfigurationException
Method Detail |
---|
private void readUserAccounts()
public void isValidUser(String username, byte[] encryptedPassword, String authentificationText, String authentificationProcessName) throws Exception
Authentication
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 Authentifkation 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.
isValidUser
in interface Authentication
username
- Benutzername, der zu dem übergebenen verschlüsselten Passwort gehörtencryptedPassword
- Passwort, das mit dem übergebenen Text authentificationText
verschlüsselt wurdeauthentificationText
- Text, der benutzt wurde um das übergebene Passwort encryptedPassword
zu verschlüsselnauthentificationProcessName
- Name des Verschlüsslungsverfahren, das benutzt wurde. Mit diesem Verfahren wird
das Originalpasswort verschlüsselt
Exception
- Fehler beim schreiben der neuen Informationen oder ein technisches Problem beim
verschlüsseln der Daten
IllegalArgumentException
- Dem Benutzernamen konnte das Passwort nicht zugeorndet werden oder der Benutzer war
unbekanntpublic byte[] getText()
Authentication
getText
in interface Authentication
public void close()
Authentication
close
in interface Authentication
private void checkRandomText(byte[] randomText) throws ConfigurationTaskException
_randomText
vorhanden ist. Kann der Text nicht gefunden werden, wird
eine Exception geworfen. Konnte der Text gefunden werden, wird der Text aus der Liste entfernt.
randomText
- Text, der in der Liste der verschickten Texte zu finden sein muss
ConfigurationTaskException
- Der übergebene Text konnte in der Liste der verschickten Texte nicht gefunden werdenpublic void processTask(String usernameCustomer, byte[] encryptedMessage, String authentificationProcessName) throws RequestException, ConfigurationTaskException
Authentication
processTask
in interface Authentication
usernameCustomer
- Benutzer, der den Auftrag erteiltencryptedMessage
- verschlüsselte Aufgabe, die ausgeführt werden sollauthentificationProcessName
- Verschlüsslungsverfahren mit der encryptedMessage
erstellt wurde
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.
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ürden, mit den richtigen Parametern, könnte er ausgeführt
werden.private void createSingleServingPassword(String username, String usernameSingleServingPasswort, String passwortSingleServingPasswort) throws RequestException, ConfigurationTaskException
username
- Benutzer, der den Auftrag angestossen hatusernameSingleServingPasswort
- Benutzer für den das Einmal-Passwort gedacht istpasswortSingleServingPasswort
- Einmal-Passwort
RequestException
- Technischer Fehler, der Auftrag konnte nicht bearbeitet werden.
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..private EncryptDecryptProcedure isEncryptDecryptProcedureAllowed(String usedEncryptDecryptProcedure) throws ConfigurationTaskException
usedEncryptDecryptProcedure
- Benutztes Verfahren als String
ConfigurationTaskException
private boolean isAdmin(String username)
username
- Benutzername, der geprüft werden soll ob Admin-Rechte vorhanden sind
private void createNewUser(String username, String newUserName, String newUserPid, String newUserPassword, boolean admin, String configurationArea) throws ConfigurationTaskException, RequestException
username
- Benutzer, der den Auftrag erteiltnewUserName
- Name des neuen BenutzersnewUserPassword
- Passwort des neuen Benutzersadmin
- 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 PidconfigurationArea
- Pid des Konfigurationsbereichs, in dem der neue Benutzer angelegt werden soll
ConfigurationTaskException
- Der neue Benutzer durfte nicht anglegt werden (Keine Rechte, Bentuzer bereits vorhanden)
RequestException
- technischer Fehler beim Zugriff auf die XML-Dateiprivate void createUserObject(String pidConfigurationArea, String username, String pid) throws ConfigurationChangeException
pidConfigurationArea
- Pid des Konfiguratinsbereichs, in dem der neue Benutzer angelegt werden sollusername
- Name des Objektspid
- Pid des Objekts
ConfigurationChangeException
- Fehler beim erzeugen des neuen Benutzersprivate void createUserXML(String newUserName, String newUserPassword, boolean admin) throws FileNotFoundException, TransformerException
newUserName
- BenutzernamenewUserPassword
- Passwortadmin
- Adminrechte ja/nein
FileNotFoundException
TransformerException
private boolean userHasObject(String username, String pid)
username
- Benutzernamepid
- Pid des Benutzers
IllegalStateException
- Es gibt ein Objekt mit der angegebenen Pid, aber der Name des Objekts ist anders, als der übergebene Nameprivate final int getSerializerVersion(byte[] message)
message
- Nachricht, die ersten 4 Bytes werden ausgelesen
private final byte[] removeFirst4Bytes(byte[] byteArray)
byteArray
- Array, aus dem die ersten 4 Bytes entfernt werden
private void changeUserPassword(String username, String userNameForPasswordChange, String newPassword) throws ConfigurationTaskException, RequestException
createNewUser(java.lang.String, java.lang.String, java.lang.String, java.lang.String, boolean, java.lang.String)
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.
username
- Benutzer, der den Auftrag zum ändern des Passworts erteilt hatuserNameForPasswordChange
- Benutzer, dessen Passwort geändert werden sollnewPassword
- neues Passwort
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).
RequestException
- Fehler beim Zugriff auf die XML-Dateiprivate void changeUserRights(String username, String usernameChangeRights, boolean newUserRights) throws ConfigurationTaskException, RequestException
username
- Benutzer, der den Auftrag erteilt hat (dieser muss Adminrechte besitzen)usernameChangeRights
- Benutzer, dessen Rechte geändert werden sollnewUserRights
- Neue Rechte des Benutzers (true = Admin-Rechte, false = normaler Benutzerrechte
ConfigurationTaskException
- Der Benutzer ist unbekannt oder der Auftraggeber besitzt nicht die nötigen Rechte
RequestException
- Fehler beim Zugriff auf die XML-Dateiprivate final Deserializer getDeserializer(byte[] encryptedMessage, String decryptenText, String authentificationProcessName) throws Exception
encryptedMessage
- Verschlüsselte Nachricht, diese wird entschlüsseltdecryptenText
- Text, mit dem die verschlüsselte Nachricht entschlüsselt wirdauthentificationProcessName
- Verfahren, mit dem die Nachricht verschlüsselt wurde
Exception
- Fehler beim entschlüsseln oder beim erstellen des Desirialisierersprivate void deleteUser(String username, String encryptedUsername, String encryptedPassword) throws IllegalStateException
IllegalStateException
private void saveXMLFile() throws TransformerException, FileNotFoundException
TransformerException
FileNotFoundException
private Element createXMLSingleServingPasswort(String newPassword, int passwortindex, String usable)
newPassword
- Passwort des neuen Einmal-Passwortspasswortindex
- Index des Einmal-Passwortsusable
- ja = Das Einmal-Passwort ist noch zu benutzen; nein = Das Einmal-Passwort kann nicht mehr benutzt werden
private Element createXMLUserAccount(String name, String password, String admin)
name
- Name des Benutzerspassword
- Passwort des Benutzers (in Klarschrift)admin
- ja = Der Benutzer besitzt Admin-Rechte; nein = Der Benutzer besitzt keine Admin-Rechte
|
|||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |