public class SrpUserAdministration extends java.lang.Object implements UserAdministration
Klasse für die Benutzerverwaltung mit SRP-Authentifizierung
Modifier and Type | Class and Description |
---|---|
private static interface |
SrpUserAdministration.DataSerializer
Interface für Serialisierungsfunktionen.
|
Modifier and Type | Field and Description |
---|---|
private java.lang.String |
_authenticatedUser
Der zuletzt authentifizierte Benutzer
|
private ClientDavInterface |
_connection
Verbindung zum Datenverteiler.
|
private static Debug |
_debug |
private boolean |
_isTokenLoginAllowed
Authentifizierung mit Login-Token ermöglichen?
|
private SenderReceiverCommunication |
_senderUserAdministration
Objekt, das es ermöglicht die Benutzer einer Konfigurations zu verwalten (Benutzer erstellen, Passwörter ändern, usw.).
|
private SrpCryptoParameter |
_srpCryptoParameter
Kryptographische Parameter nach Aushandlung mit Konfiguration
|
private SrpTelegramEncryption |
_srpTelegramEncryption
Implementierung der Verschlüssleung (null falls keien verschlüsselung aufgebaut)
|
private SrpVerifierData |
_verifier
Verifier um lokale Benutzername und Passwort prüfen zu können wenn bereits eingeloggt
|
Constructor and Description |
---|
SrpUserAdministration(ClientDavInterface connection,
SenderReceiverCommunication senderUserAdministration,
boolean isTokenLoginAllowed)
Erstellt eine neue SrpUserAdministration
|
Modifier and Type | Method and Description |
---|---|
void |
changeUserPassword(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
java.lang.String newPassword)
Beauftragt die Konfiguration das Passwort eines Benutzers zu ändern.
|
void |
changeUserRights(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
boolean adminRights)
Beauftragt die Konfiguration die Rechte eines Benutzers zu ändern.
|
void |
clearSingleServingPasswords(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String username)
Löscht alle Einmalpasswörter für einen angegebenen Benutzer.
|
private java.lang.IllegalStateException |
closeConnectionAndThrowException(java.lang.Exception e)
Nimmt eine beliebige Exception entgegen und meldet dann die Verbindung zum Datenverteiler ab.
|
void |
createNewUser(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String newUsername,
java.lang.String newUserPid,
java.lang.String newPassword,
boolean adminRights,
java.lang.String pidConfigurationArea)
Beauftragt die Konfiguration ein neues Benutzerkonto anzulegen.
|
void |
createNewUser(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String newUsername,
java.lang.String newUserPid,
java.lang.String newPassword,
boolean adminRights,
java.lang.String pidConfigurationArea,
java.util.Collection<DataAndATGUsageInformation> data)
Beauftragt die Konfiguration ein neues Benutzerkonto anzulegen.
|
int |
createOneTimePasswords(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
java.lang.String... passwords)
Fügt einem Benutzer eine Liste von Einmalpasswörtern hinzu.
|
void |
createSingleServingPassword(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
java.lang.String singleServingPassword)
Beauftragt die Konfiguration ein Einmal-Passwort zu erzeugen und es einem Benutzer zu zuordnen.
|
void |
deleteUser(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String userToDelete)
Beauftragt die Konfiguration ein Benutzerkonto zu löschen.
|
void |
disableOneTimePassword(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
int passwordIndex)
Markiert ein einzelnes Einmalpasswort als ungültig.
|
private static byte[] |
getMessage(Data reply,
java.lang.String expectedMessageType)
Prüft ein Data ob es den richtigen Nachrichtentyp enthält.
|
int |
getSingleServingPasswordCount(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String username)
Ermittelt die Anzahl der noch vorhandenen, gültigen Einmal-Passwörter.
|
SrpVerifierAndUser |
getSrpVerifier(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
int passwordIndex)
Gibt den aktuellen Überprüfungscode zurück, mit dem eine Applikation (oder der Datenverteiler) eine SRP-Authentifizierung durchführen kann und damit feststellen kann, ob ein Benutzer sein Passwort kennt.
|
int[] |
getValidOneTimePasswordIDs(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String username)
Gibt von einem Benutzer die Indizes der noch unbenutzten, verwendbaren, Einmalpasswörter zurück.
|
private boolean |
isTokenLoginAllowed()
Ist die Authentifizierung mit Login-Token erlaubt?
|
boolean |
isUserAdmin(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user)
Prüft, ob ein angegebener Benutzer Admin-Rechte besitzt.
|
boolean |
isUserValid(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user)
Prüft, ob ein angegebener Benutzername gültig ist, d.h. ob er ein zugeordnetes Systemobjekt und einen Eintrag in der benutzerverwaltung.xml hat.
|
private void |
login(java.lang.String userName,
java.lang.String userPassword)
Anmeldung bei der Konfiguration.
|
private byte[] |
sendMessage(java.lang.String orderer,
java.lang.String messageAction,
byte[] messageBytes) |
private byte[] |
sendUserAdministrationQuery(java.lang.String orderer,
java.lang.String ordererPassword,
UserAdministrationQuery query,
SrpUserAdministration.DataSerializer serializer)
Sendet eine verschlüsselte Anfrage an die Konfiguration.
|
private byte[] |
sendUserAdministrationTask(byte[] message)
Diese Methode verschickt ein Telegramm vom Typ “AuftragBenutzerverwaltung” und wartet anschließend auf die Antwort.
|
private int |
setOrAppendOneTimePasswords(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
java.lang.String[] passwords,
boolean append) |
void |
setSrpVerifier(java.lang.String orderer,
java.lang.String ordererPassword,
java.lang.String user,
SrpVerifierData verifier)
Setzt den SRP-Überprüfungscode des angegebenen Benutzers.
|
java.util.List<SystemObject> |
subscribeUserChangeListener(MutableCollectionChangeListener listener)
Erstellt einen Listener der Änderungen an den Benutzern überwacht.
|
void |
unsubscribeUserChangeListener(MutableCollectionChangeListener listener)
Entfernt den mit subscribeUserChangeListener erstellten Listener
|
private ClientCredentials |
validatePassword(java.lang.String newPassword)
Überprüft ein Passwort.
|
private void |
writeVerifierOrPassword(java.lang.String user,
java.io.DataOutputStream out,
ClientCredentials clientCredentials)
Schreibt das Passwort bzw. den Überprüfungscode in das Telegramm
|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
getSrpVerifier
private static final Debug _debug
private final ClientDavInterface _connection
Verbindung zum Datenverteiler. Wird benötigt um die Verbindung zum Datenverteiler abzumelden, falls es bei Anfragen zu schweren Fehlern gekommen ist.
private final SenderReceiverCommunication _senderUserAdministration
Objekt, das es ermöglicht die Benutzer einer Konfigurations zu verwalten (Benutzer erstellen, Passwörter ändern, usw.).
private SrpTelegramEncryption _srpTelegramEncryption
Implementierung der Verschlüssleung (null falls keien verschlüsselung aufgebaut)
private SrpCryptoParameter _srpCryptoParameter
Kryptographische Parameter nach Aushandlung mit Konfiguration
private SrpVerifierData _verifier
Verifier um lokale Benutzername und Passwort prüfen zu können wenn bereits eingeloggt
private java.lang.String _authenticatedUser
Der zuletzt authentifizierte Benutzer
private boolean _isTokenLoginAllowed
Authentifizierung mit Login-Token ermöglichen?
public SrpUserAdministration(ClientDavInterface connection, SenderReceiverCommunication senderUserAdministration, boolean isTokenLoginAllowed)
Erstellt eine neue SrpUserAdministration
connection
- DatenverteilerverbindungsenderUserAdministration
- Sender-Klasse im RequesterisTokenLoginAllowed
- Ist die authentifizierung mit Login-Token erlaubt?private void login(java.lang.String userName, java.lang.String userPassword) throws ConfigurationTaskException, CommunicationError, InconsistentLoginException
Anmeldung bei der Konfiguration. Erfolgt bei der ersten Anfrage je neuem Auftraggeber
userName
- AuftraggeberuserPassword
- Auftraggeber-PasswortConfigurationTaskException
CommunicationError
InconsistentLoginException
private boolean isTokenLoginAllowed()
Ist die Authentifizierung mit Login-Token erlaubt? Standardmäßig nein.
private byte[] sendUserAdministrationQuery(java.lang.String orderer, java.lang.String ordererPassword, UserAdministrationQuery query, SrpUserAdministration.DataSerializer serializer) throws ConfigurationTaskException
Sendet eine verschlüsselte Anfrage an die Konfiguration. Eine SRP-Authentifizierung zur Aushandlung dr Verschlüsselung mit login(String, String)
muss bereits erfolgt sein.
orderer
- AuftraggeberordererPassword
- Auftraggeber-Passwortquery
- Anfragetypserializer
- Delegate-Funktion oder Lambda-Ausdruck, die die Anfrage serialisiert. Die in dieser Funktion geschriebenen daten werden automatisch verschlüsseltConfigurationTaskException
private byte[] sendMessage(java.lang.String orderer, java.lang.String messageAction, byte[] messageBytes) throws RequestException, ConfigurationTaskException, InconsistentLoginException
private static byte[] getMessage(Data reply, java.lang.String expectedMessageType) throws RequestException, InconsistentLoginException
Prüft ein Data ob es den richtigen Nachrichtentyp enthält. Ist das Data vom richtigen Typ, wird das Byte-Array des DataŽs genommen und einem Deserialisierer übergeben.
reply
- Antwort der Konfiguration auf einen KonfigurationsanfrageexpectedMessageType
- Typ des Telegramms, den die Konfiguration verschickt, wenn der Auftrag ohne Probleme bearbeitet werden konnteRequestException
- Technischer Fehler auf Seiten der Konfiguration oder auf Seiten des Clients bei der Übertragung des Auftrags. Dieser Fehler ist nicht zu beheben.InconsistentLoginException
private byte[] sendUserAdministrationTask(byte[] message) throws RequestException, ConfigurationTaskException, InconsistentLoginException
Diese Methode verschickt ein Telegramm vom Typ “AuftragBenutzerverwaltung” und wartet anschließend auf die Antwort.
message
- Nachricht, die verschickt werden sollRequestException
- Fehler bei der Bearbeitung des Telegramms (Der Benutzer hatte nicht die nötigen Rechte diesen Auftrag zu erteilen, usw.)ConfigurationTaskException
- Fehler bei Bearbeitung des Auftrags auf KonfigurationsseiteInconsistentLoginException
private java.lang.IllegalStateException closeConnectionAndThrowException(java.lang.Exception e)
Nimmt eine beliebige Exception entgegen und meldet dann die Verbindung zum Datenverteiler ab. Nach der Abmeldung wird eine IllegalStateException geworfen.
e
- Grund, warum die Verbindung abgebrochen werden musspublic int getSingleServingPasswordCount(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String username) throws ConfigurationTaskException
UserAdministration
Ermittelt die Anzahl der noch vorhandenen, gültigen Einmal-Passwörter. Jeder Benutzer kann diese Anzahl für seinen eigenen Account ermitteln, für fremde Accounts sind Admin-Rechte notwendig.
getSingleServingPasswordCount
in interface UserAdministration
orderer
- Benutzername des AuftraggebersordererPassword
- Passwort des Auftraggebers, dies wird zum verschlüsseln benutzt und darf nicht mit übertragen werdenusername
- Benutzername, dessen Einmalpasswörter geprüft werden sollen.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen.UserAdministration.getValidOneTimePasswordIDs(String, String, String)
public int[] getValidOneTimePasswordIDs(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String username) throws ConfigurationTaskException
UserAdministration
Gibt von einem Benutzer die Indizes der noch unbenutzten, verwendbaren, Einmalpasswörter zurück. Die Länge des Arrays entspricht der Rückgabe von UserAdministration.getSingleServingPasswordCount(String, String, String)
.
Damit dieser Auftrag für einen fremden Benutzer ausgeführt werden kann, muss der Auftraggeber orderer
die Rechte eines Administrators besitzen. Besitzt der Auftraggeber diese Rechte nicht, wird der Auftrag zwar zur Konfiguration übertragen, dort aber abgelehnt. Für den eigenen Benutzer ist die Anfrage in jedem Fall erlaubt.
getValidOneTimePasswordIDs
in interface UserAdministration
orderer
- AuftraggeberordererPassword
- Passwort des Auftraggebersusername
- Benutzername für den Passwörter angelegt werden sollenConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen (z.B. Login-Daten falsch oder die Konfiguration unterstützt den Auftrag nicht und muss aktualisiert werden).public void clearSingleServingPasswords(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String username) throws ConfigurationTaskException
UserAdministration
Löscht alle Einmalpasswörter für einen angegebenen Benutzer. Es ist jedem Benutzer gestattet die Passwörter seines eigenen Accounts zu löschen. Soll ein fremdes Benutzerkonto geändert werden, sind Admin-Rechte nötig.
clearSingleServingPasswords
in interface UserAdministration
orderer
- Benutzername des AuftraggebersordererPassword
- Passwort des Auftraggebers, dies wird zum verschlüsseln benutzt und darf nicht mit übertragen werdenusername
- Benutzername, dessen Einmalpasswörter gelöscht werden sollen.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen.public void createNewUser(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String newUsername, java.lang.String newUserPid, java.lang.String newPassword, boolean adminRights, java.lang.String pidConfigurationArea) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration ein neues Benutzerkonto anzulegen. Zu einem Benutzerkonto gehören ein Benutzername, ein Passwort und die Rechte des Benutzers.
Ein neuer Benutzer kann nur durch einen Benutzer angelegt werden, der die Rechte eines Administrators besitzt. Besitzt der Benutzer diese Rechte nicht, wird der Auftrag zur Konfiguration übertragen und dort abgelehnt.
createNewUser
in interface UserAdministration
orderer
- Benutzername des Auftraggebers.ordererPassword
- Passwort des Auftraggebers.newUsername
- Benutzername des neuen Benutzers.newUserPid
- Pid des neuen Benutzers. Wird der Leerstring ("") übergeben, wird dem Benutzer keine explizite Pid zugewiesen.newPassword
- Passwort des neuen Benutzers.adminRights
- true
, wenn der neue Benutzer die Rechte eines Administrators besitzen soll; false
, wenn der Benutzer keine speziellen Rechte besitzen soll.pidConfigurationArea
- Pid des Konfigurationsbereichs, in dem der neue Benutzer angelegt werden soll.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen einen neuen Benutzer anzulegen.public void deleteUser(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String userToDelete) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration ein Benutzerkonto zu löschen. Alle Informationen, die zu einem Benutzerkonto gehören, sind mit dem Passwort des Auftraggebers zu verschlüsseln und verschlüsselt zu übertragen.
Ein Benutzerkonto kann nur durch einen Benutzer gelöscht werden, der die Rechte eines Administrators besitzt.
deleteUser
in interface UserAdministration
orderer
- Benutzername des Auftraggebers.ordererPassword
- Passwort des Auftraggebers.userToDelete
- Benutzername des zu löschenden Benutzers.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen.public boolean isUserAdmin(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user) throws ConfigurationTaskException
UserAdministration
Prüft, ob ein angegebener Benutzer Admin-Rechte besitzt. Jeder Benutzer kann diese Aktion ausführen.
isUserAdmin
in interface UserAdministration
orderer
- Benutzername des Auftraggebers.ordererPassword
- Passwort des Auftraggebers.user
- Name des zu prüfenden BenutzersConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen.public boolean isUserValid(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user) throws ConfigurationTaskException
UserAdministration
Prüft, ob ein angegebener Benutzername gültig ist, d.h. ob er ein zugeordnetes Systemobjekt und einen Eintrag in der benutzerverwaltung.xml hat. Jeder Benutzer kann diese Aktion ausführen. Zur (verschlüsselten) Übertragung des Vorgangs ist dennoch die Angabe eines gültigen Benutzernamens und Passworts notwendig. Mit dieser Funktion kann geprüft werden, ob die Benutzernamen, die UserAdministration.subscribeUserChangeListener(de.bsvrz.dav.daf.main.config.MutableCollectionChangeListener)
liefert, tatsächlichen zu einem gültigen Benutzer gehören, da subscribeUserChangeListener nur die Systemobjekte berücksichtigt.
isUserValid
in interface UserAdministration
orderer
- Benutzername des Auftraggebers.ordererPassword
- Passwort des Auftraggebers.user
- Name des zu prüfenden BenutzersConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen.public void createNewUser(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String newUsername, java.lang.String newUserPid, java.lang.String newPassword, boolean adminRights, java.lang.String pidConfigurationArea, java.util.Collection<DataAndATGUsageInformation> data) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration ein neues Benutzerkonto anzulegen. Zu einem Benutzerkonto gehören ein Benutzername, ein Passwort und die Rechte des Benutzers.
Ein neuer Benutzer kann nur durch einen Benutzer angelegt werden, der die Rechte eines Administrators besitzt. Besitzt der Benutzer diese Rechte nicht, wird der Auftrag zur Konfiguration übertragen und dort abgelehnt.
createNewUser
in interface UserAdministration
orderer
- Benutzername des Auftraggebers.ordererPassword
- Passwort des Auftraggebers.newUsername
- Benutzername des neuen Benutzers.newUserPid
- Pid des neuen Benutzers. Wird der Leerstring ("") übergeben, wird dem Benutzer keine explizite Pid zugewiesen.newPassword
- Passwort des neuen Benutzers.adminRights
- true
, wenn der neue Benutzer die Rechte eines Administrators besitzen soll; false
, wenn der Benutzer keine speziellen Rechte besitzen soll.pidConfigurationArea
- Pid des Konfigurationsbereichs, in dem der neue Benutzer angelegt werden soll.data
- Konfigurierende Datensätze mit den dazugehörigen Attributgruppenverwendungen, die für das neue Benutzer-Objekt gespeichert werden sollen. Oder null
falls keine Datensätze angelegt werden sollen.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen einen neuen Benutzer anzulegen.ConfigurationArea.createDynamicObject(de.bsvrz.dav.daf.main.config.DynamicObjectType, String, String, java.util.Collection)
public void changeUserRights(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, boolean adminRights) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration die Rechte eines Benutzers zu ändern.
Nur ein Benutzer mit den Rechten eines Administrators darf die Rechte anderer Benutzer ändern. Besitzt ein Benutzer diese Rechte nicht wird der Auftrag an die Konfiguration verschickt und dort von der Konfiguration abgelehnt.
changeUserRights
in interface UserAdministration
orderer
- Auftraggeber, der die Rechte eines Benutzers ändern möchte.ordererPassword
- Passwort des Auftraggebers.user
- Benutzer, dessen Rechte geändert werden sollen.adminRights
- true
, wenn der Benutzer, der mit user
identifiziert wird, die Rechte eines Administrators erhalten soll; false
, wenn der Benutzer, der mit user
identifiziert wird, keine speziellen Rechte erhalten soll.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen die Rechte eines anderen Benutzers zu ändern.public SrpVerifierAndUser getSrpVerifier(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, int passwordIndex) throws ConfigurationTaskException, SrpNotSupportedException
UserAdministration
Gibt den aktuellen Überprüfungscode zurück, mit dem eine Applikation (oder der Datenverteiler) eine SRP-Authentifizierung durchführen kann und damit feststellen kann, ob ein Benutzer sein Passwort kennt.
In der Antwort ist außerdem das Passwort-Salt enthalten, welches benötigt wird um (bei Kenntnis des Passworts) ein Authentifizierungs-Token für eine passwd-Datei zu erzeugen. Hierfür kann die Methode SrpClientAuthentication#createLoginToken(de.bsvrz.dav.daf.communication.srpAuthentication.SrpVerifierData, java.lang.String, java.lang.String)
benutzt werden.
Es ist jedem Benutzer gestattet seinen eigenen Überprüfungscode abzufragen. Benutzer mit Admin-Rechten können auch fremde Überprüfungs-Codes abfragen. Zu beachten ist, dass es mit einem Überprüfungscode nur möglich ist, zu prüfen ob ein Passwort gültig ist. Es sind keine Rückschlüsse auf das Klartextpasswort oder auf den Authentifizierungs-Token x möglich.
Ist der Benutzer nicht vorhanden, ist die User-ID 0, aber die Konfiguration generiert dennoch einen “gefälschten” Verifier. Auf diese Weise kann ein Verwender dieser Klasse erreichen, dass nicht-eingeloggte Clients nicht einfach ausprobieren können, welche Benutzer existieren und welche nicht. Dieses Verhalten wird besonders bei der Authentifizierung am Datenverteiler benötigt, andere Anwender dieser Klasse können den gefälschten Verifier in der Regel ignorieren, außer es soll ein ähnliches Verhalten erreicht werden. Siehe hierzu z.B. SrpServerAuthentication.step1(String, BigInteger, BigInteger, boolean)
.
getSrpVerifier
in interface UserAdministration
orderer
- AuftraggeberordererPassword
- Passwort des Auftraggebersuser
- Benutzername des Benutzers, von dem der Überprüfungscode geholt werden soll.passwordIndex
- Optional kann der Verifier eines Einmalpassworts mit dem angegebenen Index angefragt werden.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen. Insbesondere wird die spezifischere SrpNotSupportedException
geworfen, wenn die Konfiguration SRP nicht unterstützt und aktualisiert werden muss.SrpNotSupportedException
public void disableOneTimePassword(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, int passwordIndex) throws ConfigurationTaskException
UserAdministration
Markiert ein einzelnes Einmalpasswort als ungültig. Es ist jedem Benutzer gestattet die Passwörter seines eigenen Accounts zu löschen. Soll ein fremdes Benutzerkonto geändert werden, sind Admin-Rechte nötig.
disableOneTimePassword
in interface UserAdministration
orderer
- AuftraggeberordererPassword
- Auftraggeber-Passwortuser
- Benutzer, dessen Einmalpasswort als ungültig/benutzt markiert werden sollpasswordIndex
- Index des Einmalpassworts (>= 0)ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen (z.B. Login-Daten falsch oder die Konfiguration unterstützt den Auftrag nicht und muss aktualisiert werden).private int setOrAppendOneTimePasswords(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, java.lang.String[] passwords, boolean append) throws ConfigurationTaskException
ConfigurationTaskException
private void writeVerifierOrPassword(java.lang.String user, java.io.DataOutputStream out, ClientCredentials clientCredentials) throws java.io.IOException
Schreibt das Passwort bzw. den Überprüfungscode in das Telegramm
user
- Benutzernameout
- Telegramm-OutputStreamclientCredentials
- Passwortjava.io.IOException
- IO-Fehlerpublic int createOneTimePasswords(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, java.lang.String... passwords) throws ConfigurationTaskException
UserAdministration
Fügt einem Benutzer eine Liste von Einmalpasswörtern hinzu. Die Einmalpasswörter werden in der Reihenfolge in der Konfiguration gespeichert, wie sie übergeben werden, d.h. das Passwort mit dem Array-Index 0 enthält den nächsten freien Index, den diese Methode zurückgibt. Beispiel: Diese Methode gibt 9 zurück, dann enthält das erste übergebene Passwort den Index 9, das zweite den Index 10 usw. Will sich der Benutzer später mit einem Einmalpasswort einloggen, muss er den Passwort-Index mit einem Minus getrennt an seinen Benutzernamen anhängen, z.B. “Tester-19” für das Einmalpasswort mit Index 19 am Benutzer Tester.
Damit dieser Auftrag ausgeführt werden kann, muss der Auftraggeber orderer
die Rechte eines Administrators besitzen. Besitzt der Auftraggeber diese Rechte nicht, wird der Auftrag zwar zur Konfiguration übertragen, dort aber abgelehnt.
createOneTimePasswords
in interface UserAdministration
orderer
- AuftraggeberordererPassword
- Passwort des Auftraggebersuser
- Benutzername für den Passwörter angelegt werden sollenpasswords
- Anzulegende PasswörterConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen (z.B. Login-Daten falsch oder die Konfiguration unterstützt den Auftrag nicht und muss aktualisiert werden).public void changeUserPassword(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, java.lang.String newPassword) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration das Passwort eines Benutzers zu ändern. Diese Methode kann von jedem Benutzer aufgerufen werden. Es ist jedem Benutzer gestattet das Passwort seines Benutzerkontos zu ändern. Soll das Passwort eines fremden Benutzerkontos geändert werden, sind die Rechte eines Administrators nötig.
changeUserPassword
in interface UserAdministration
orderer
- Benutzername des AuftraggebersordererPassword
- Derzeit gültiges Passwort, falls der Benutzername orderer
und user
identisch sind. Sind die Parameter nicht identisch, muss der Benutzer, der mit orderer
identifiziert wird, die Rechte eines Administrators besitzen und sein Passwort übergebenuser
- Benutzername des Benutzerkontos, dessen Passwort geändert werden sollnewPassword
- Neues Passwort des Benutzers, der mit user
identifiziert wurdeConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen das Passwort eines anderen Benutzers zu ändern oder das Passwort zum ändern ist falsch.public void setSrpVerifier(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, SrpVerifierData verifier) throws ConfigurationTaskException
UserAdministration
Setzt den SRP-Überprüfungscode des angegebenen Benutzers. Diese Methode tut dasselbe wie UserAdministration.changeUserPassword(String, String, String, String)
, mit dem Unterschied, das changeUserPassword
den Überprüfungscode anhand des gegebenen Passworts berechnet, während diese Methode einen bereits irgendwo berechneten Überprüfungscode an die Konfiguration überträgt
setSrpVerifier
in interface UserAdministration
orderer
- Benutzername des AuftraggebersordererPassword
- Derzeit gültiges Passwort, falls der Benutzername orderer
und user
identisch sind. Sind die Parameter nicht identisch, muss der Benutzer, der mit orderer
identifiziert wird, die Rechte eines Administrators besitzen und sein Passwort übergebenuser
- Benutzername des Benutzerkontos, dessen Passwort geändert werden sollverifier
- neuer Überprüfungscode für den angegebenen Benutzer, wird vo nder Konfiguration zur Überprüfung des Passworts benutzt, ohne dass diese selbst das Passwort wissen mussConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen das Passwort eines anderen Benutzers zu ändern oder das Passwort zum ändern ist falsch.private ClientCredentials validatePassword(java.lang.String newPassword)
Überprüft ein Passwort. Diese Methode prüft aktuell nur, dass das Passwort nicht leer ist. Man könnte noch weitere Richtlinien implementieren
newPassword
- Neues Passwortjava.lang.IllegalArgumentException
- Ungültiges Passwortpublic void createSingleServingPassword(java.lang.String orderer, java.lang.String ordererPassword, java.lang.String user, java.lang.String singleServingPassword) throws ConfigurationTaskException
UserAdministration
Beauftragt die Konfiguration ein Einmal-Passwort zu erzeugen und es einem Benutzer zu zuordnen.
Damit dieser Auftrag ausgeführt werden kann, muss der Auftraggeber orderer
die Rechte eines Administrators besitzen. Besitzt der Auftraggeber diese Rechte nicht, wird der Auftrag zwar zur Konfiguration übertragen, dort aber abgelehnt.
createSingleServingPassword
in interface UserAdministration
orderer
- Benutzername des AuftraggebersordererPassword
- Passwort des Auftraggebers.user
- Benutzername, dem ein Einmal-Passwort hinzugefügt werden soll.singleServingPassword
- Einmal-Passwort das dem Benutzer, der mit username
identifiziert wird, hinzugefügt wird.ConfigurationTaskException
- Die Konfiguration kann den Auftrag nicht ausführen, weil die übergebenen Parameter falsch sind. So kann der Auftraggeber zum Beispiel nicht die nötigen Rechte besitzen ein Einmal-Passwort anzulegen oder das Passwort existierte bereits, usw..public java.util.List<SystemObject> subscribeUserChangeListener(MutableCollectionChangeListener listener)
UserAdministration
Erstellt einen Listener der Änderungen an den Benutzern überwacht. Gibt eine aktuelle Liste aller Benutzer zurück.
subscribeUserChangeListener
in interface UserAdministration
listener
- Objekt, an das Rückmeldungen gesendet werden sollen. null
, wenn nur die Liste der aktuellen Benutzer geholt werden soll.public void unsubscribeUserChangeListener(MutableCollectionChangeListener listener)
UserAdministration
Entfernt den mit subscribeUserChangeListener erstellten Listener
unsubscribeUserChangeListener
in interface UserAdministration
listener
- Objekt, and das keine Rückmeldungen mehr gesendet werden sollen.