Skip to content

Auth-Service

Zuständig für die Authentifizierung und Verwaltung der Rechte der User des Systems.

Der Service stellt auch die Loginmaske zur Verfügung. Dazu wird Freemarker verwendet. Mittels wro4j werden JavaScript Ressourcen (jquery und Bootstrap) zur Verfügung gestellt. Im Projekt sind zusätzliche Ressourcen im Ordner resources-non-filtered hinterlegt.

Abhängigkeiten

  • Infomanagement-Service

Datenmodell

IMPORTANT

Der Benutzername liegt in der Datenbank nur verschlüsselt vor.

Zusätzliche Claims

Neben den Standardclaims werden durch den Auth-Service folgende zusätzliche Claims gesetzt:

ClaimnameBeschreibungDatentyp
wahlbezirkIDtechnische ID des Hauptwahlbezirkes des BenutzerkontosUUIDv4
wahlbezirksArtArt des Wahlbezirks (Urnenwahl oder Briefwahl)Enum: [BWB, UWB]
wahlbezirkid_wahlnummerWahlbezirke und Wahlen, die dem Benutzerkonto zur Pflege zugewiesen sindJSON-String

Aufbau `wahlbezirkid_wahlnummer`

Der JSON-String bildet folgendes Objekt ab:

JSON
{"wbid_wahlnummer":
  [{
      "wahlbezirkID": "e5f6a7b8-c9d0-4e1f-2a3b-4c5d6e7f8a9b",
      "wahlnummer": "0",
      "wahlID": "b2c3d4e5-f6a7-4b8c-9d0e-1f2a3b4c5d6e"
  }]
}
  • wahlbezirkID ... technische ID des Wahlbezirkes für die Wahl
  • wahlnummer ... Nummer der Wahl in der Reihenfolge der abzuarbeitenden Wahlen
  • wahlID ... technische ID der Wahl, welche durch das Benutzerkonto betreut wird

Diese Informationen sind auch über den Userinfo-Endpunkt des Auth-Services abrufbar.

TIP

Die Verwendung des Userinfo-Endpunkts wird empfohlen, da man sich so unabhängiger vom Auth-Service macht, und so leichter Alternativen, wie z. B. den Keycloak, verwenden kann.

Prozesse

Auswahl Loginmaske

Login

Damit die Nutzer*innen sich anmelden dürfen, müssen zum einen die Logindaten entsprechend LDAP korrekt sein. Des Weiteren müssen folgende Regeln beachtet werden:

  1. Ist das Benutzerkonto gesperrt?
  2. Falls das Benutzerkonto gesperrt ist, muss die Sperre abgelaufen sein
  3. Dürfen die Nutzer*innen sich nur innerhalb einer bestimmten Zeitspanne einloggen wird der Zeitraum validiert
  4. Erfolgte der Login über eine erlaubte Anwendung (Prüfung der clientID)

NOTE

Ein erfolgreicher Login setzt alle vorherigen Loginversuche zurück

Erstellung der Benutzerkonten

IMPORTANT

Damit Benutzerkonten angelegt werden können, muss die definierte Authority vorhanden sein die den entsprechenden Konten zugewiesen werden soll.

NOTE

Wird der Service mit dem Profil db-dummydata gestartet werden Testdaten erzeugt, welche die notwendige Authority umfasst. Im regulären Betrieb werden die Authority sowie Permission mittels Skript erzeugt.

Der Service erzeugt für eine Liste an Wahlbezirken eines Wahltermins (wahltagID) Benutzerkonten. Dabei werden der Benutzername und die PIN zufällig erzeugt.

Die Benutzerkonten die zuvor für den Wahltermin vorhanden waren werden gelöscht.

Konfigurationsparameter

Alle Konfigurationsparameter beginnen mit dem Prefix service.config

NameBeschreibungDefault
cors.allowedOriginsListe mit erlaubten Origins für CORS.http://localhost:8083, http://host.docker.internal:8083
crypto.encryptionPrefixString vor dem verschlüsselten Wert. Auf diese Weise sind verschlüsselte Werte erkennbarENCRYPTED:
crypto.keySchlüssel zum ver- und entschlüsseln
falscheLoginZeitstrafeZeit in Minuten für eine Sperrung10
maxLoginAttemptsMaximale Anzahl an Fehlversuchen bis der Account gesperrt wird.5
clients.infomanagement.basepathURL zum Infomanagement-Servicehttp://localhost:39146
clients.infomanagement.configkey.welcomeMessageSchlüssel für Konfiguration der WillkommensnachrichtWILLKOMMENSTEXT
clients.infomanagement.configkey.fruehesterLoginSchlüssel für Konfiguration des frühesten Zeitpunktes für LoginFRUEHESTE_LOGIN_UHRZEIT
clients.infomanagement.configkey.spaetesterLoginSchlüssel für Konfiguration des spätesten Zeitpunktes für LoginSPAETESTE_LOGIN_UHRZEIT
clients.infomanagement.dateformatFormat des Datums wie es vom Infomanagement-Service kommtdd.MM.yyyy HH:mm
serviceauth.welcomemessage.defaultStandard Willkommensnachricht falls die definierte Willkommensnachricht nicht geladen werden kannWillkommen zur Wahl!
ldap.userDnUsername zur Authentifizierung am LDAP-Server
ldap.userDnPasswordPasswort zur Authentifizierung am LDAP-Server
ldap.contextSourceUrl zum LDAP-Server, z.B. ldaps://my-ldap-server.de:636
ldap.userSearchBaseBasispfad für Suche, z.b. o=myOrg,c=deou=people
ldap.userSearchFilterFilter für Suche, z.B. (uid={0})uid={0}
oauth2.logoutUriUrl des AuthServices für den Logout. Ist der selbe Service über den der Login erfolgtehttp://host.docker.internal:8100/logout
oauth2.clients.wahllokalgui.idID des Client der Wahllokal-Anwendungwahllokalgui
oauth2.clients.admingui.idID des Client der Admintool-Anwendungadmingui
oauth2.jwk.rsa.init.seedSeed für RSA-Schlüsselpaar. Gleiche Seeds sorgen für gleiche Ergebnisse
rsa.rsa-key-settingEnum (GENERATED_KEY,STATIC_KEY), das bestimmt welcher RSA-Key verwendet werden soll
rsa.public-keyVerwendeter Public-Key
rsa.private-keyVerwendeter Private-Key
spring.ldap.embedded.ldifOrt der LDAP-Resource für embedded LDAP-Server (Profil: dummy.ldap)classpath:users.ldif