Giter VIP home page Giter VIP logo

authenticationprovider's Introduction

Authentication Provider

Monorepo für die eigene Benutzerverwaltung

Inhalt

Dies ist ein authentication provider für Anwendungen auf mathe-jung-alt.de, unsichtbare-homepage.de, opa-wetterwachs.de und ggf. weiteren domains aus dem Winkel-Universum

2 Anwendungen

  • authprovider: Login authentication für verschiedene Clients
  • profil-server: Pflege des eigenen Benutzerkontos (Name, Email, Passwort, Löschen des Kontos) ist ein eigener Client für den authprovider.

Development Server

Sarten des Servers mit Maven:

mvn clean compile quarkus:dev

Root-Resource zum Testen, ob das Backend da ist:

http://localhost:9000/authprovider/dev

http://localhost:9000/authprovider/heartbeats?heartbeatId=heartbeat

Confirm-Url zum Testen:

http://localhost:9000/authprovider/registration/confirmation?code=96ea688d525f4f1f988902c488625fb8

curl commands

curl -X POST -H 'Accept: application/json' -H 'Content-Type: application/json' -i http://localhost:9000/authprovider/temppwd -d '{"email":"[email protected]","clientCredentials":{"clientId":"WLJLH4vsldWapZrMZi2U5HKRBVpgyUiRTWwX7aiJd8nX","redirectUrl":"localhost:4200"}}'

Beispiel-Clientanwendung

Ein Showcase für eine Clientanwendung, die diesen AuthProvider nutzt, ist checklistenapp mit checklistenserver

Lokale Installation für Entwicklung anderer Anwendungen

Die gesamte Anwendung wird mittels Docker bereitgestellt. Alle sourcen müssen nach

/media/veracrypt1/ansible/docker/authprovider

kopiert werden. 4 Docker-Images sind beteiligt. docker-compose.yml erzeut die zusammengehörenden Container.

cd /media/veracrypt1/ansible/docker/authprovider

docker image build -t heik2718/auth-mariadb ./database
docker image build -t heik2718/authprovider ./server
docker image build -t heik2718/profil-server ./profil-server
docker image build -t heike2718/authprovider-nginx ./nginx

Allgemeines (Abgrenzung zu Identity-Providern)

Der AuthProvider dient ausschließlich zum Authentisieren mittels login-Name / email und Passwort.

Als einzige Daten werden Mailadresse, Loginname, Vor- und Nachname sowie Rollen erhoben. Beim Anlegen eines Benutzerkontos können vom Client Rollen im Query-Parameter groups als kommaseparierte Liste mitgegeben werden. Alle Benutzerkonten bekommen außerdem die Rolle STANDARD automatisch. D.h. wenn eine Anwendung außer STANDARD keine weiteren Rollen benötigt, kann der Query-Parameter leer bleiben.

Hinweis: Enthält die groups-Liste ADMIN, so wird die Mailadresse desjenigen geloggt, der ein Benutzerkonto anlegen will und die Registrierung mit 403 abgebrochen..

Daten des Benutzerkontos (außer Rollen) können nur in der profil-app geändert werden.

Workflows

Registrieren (SignUp)

Workflow Signup

Login (Authentisierung)

Workflow Login

Umgang mit dem JWT

Validierung

  • Das JWT darf nur Server zu Server übertragen werden und wird möglichst verwendet, um eine Session auf dem Server zu halten. Daher muss es nur ganz kurz gültig sein. Die Session-ID und ein expire-Zeitpunkt werden im localstorage gehalten.
  • expiresAt (= Anzahl Sekunden seit 1.1.1970) kann dann synchron für loggedInGuards verwendet werden, um Navigationsrouten zu enablen/disablen
  • im Backend einen AuthorizationFilter implementieren, der bei jedem Request das SessionCookie liest und validiert

AuthProvider-Client anlegen

Jede Anwendung, die AuthProvider nutzen will, muss mittels "insert into CLIENTS"- Skript in der AuthProvider-DB registriert werden und authentisiert sich über eine clientID und ein clientSecret. Beide Credentials dürfen nur von Server zu Server ausgetauscht werden und. Hierfür steht beim AuthProvider die REST-Resource

http://localhost:9000/authprovider/clients/oauth/token

zur Verfügung, die als Payload ein JSON-Objekt der Form

{"clientId":"WLJLH4vsldWapZrMZi2U5HKRBVpgyUiRTWwX7aiJd8nX","clientSecret":"start123","nonce":"horst"}

entgegennimmt. Das nonce kann und sollte vom Client in der Form eines CSRF-Tokens verwendet werden, um zu prüfen, ob der Response vom Authprovider unterwegs manipuliert wurde. Es wird vom Authprovider ungeänder im Response-payload zurückgegeben.

Migration Minikänguru-Konten

Die Tabelle benutzer abgelöst durch USERS:

Import-Schnittstelle

URL ist

/authprovider/users/import

Im Unterverzeichnis bv-migration/import im application-config-Verzeichnis liegen die zu importierenden Benutzerdaten als JSON-Dateien, die auf dem anderen Server exportiert wurden. Aufruf der URL importiert die Daten, sofern sie noch nicht vorhanden sind, in die DB des authproviders.

Export-Schnittstelle

siehe mkverwaltung

ER-Diagramme

users sind die ResourceOwner, also diejenigen, die sich bei einer Resource authentisieren (Lehrer, Privatpersonen, Anwendungsadmins,...)

ER-Diagram USERS

Das folgende Bild zeigt das bisherige Datenmodell. Daten der Tabelle BENUTZER werden migriert nach USERS und behalten dadurch die bisherigen Login-Credetials bei. Die bisherigen Rollenzuordnungen wandern in die Clients des AuthProviders.

ER-Diagram benutzer

Migration der Minikänguru-Konten mittels Export- Import- Schnittstellen (Export auf Server 1, Import auf Server 2, dazwischen Dateien kopieren).

Die IDs der zu migrierenden Benutzerkonten werden aus der DB mittels select in eine Datei uuid.lst geschrieben, die der Export-Runner verwendet. Die exportierten Benutzerdaten liegen anschließend als JSON-Dateien vor.

OAuth-Clients- Tabelle

Jede Anwendung, die diesen AuthProvider nutzen möchte, registriert sich (über Mail) als Client. Sie erhält eine client-ID, die bei der Kommunikation mit dem AuthProvider benötigt. Weitere Attribute werden für den Redirect-Mechanismus benötigt. Der Client kann konfigurieren, ob er einen von der Mailadresse verschiedenen Loginnamen als Authentisierungsbestandteil verwenden möchte (LOGIN_MIT_LOGINNAME) und wie lange ein JWT gültig sein soll (JWT_EXPIRATION_MINUTES)

ER-Diagram CLIENTS

Releasenotes

Release-Notes

authenticationprovider's People

Contributors

heike2718 avatar

Watchers

 avatar

authenticationprovider's Issues

Loading-Indicator vor dem Redirect zur Anwendung

Wegen der grottigen Antwortzeiten des Servers dauert es nach der Eingabe des Passworts sehr lange und man sieht nichts. Daher dann loding indicator anzeigen, um sinnlose cliicks zu vermeiden

Origin-Referrer-Blockade zu streng eingestellt?

Possible CSRF-Attack: targetOrigin != extractedOrigin: [targetOrigin=opa-wetterwachs.de, extractedOriginOrReferer=android-app:]

Vermutlich wurde der Aktivierungslink aus gmail heraus angeklickt und als statnadrbrowser war ein Browser mit dem Referrer-Header android-app eingestellt. Dies wurde nicht akzeptiert.

Muss beobachtet werden.

Admin-Anwendung für Benutzerverwaltung

Als Admin will ich die Benutzerdaten administrieren können, ohne direkte updates in der DB zu machen.

Erste Akzeptanzkriterien

  • Es gibt auf dem V-Server 2 eine Webanwendung namens bv-admin-app
  • Nur meinem Admin-Benutzerkonto kann ich mich einloggen. Kein weiterer Benutzer kann sich einloggen
  • Ich kann Benutzerkonten mit der Mailadresse, einem Teil der UUID, Vorname, Nachname, Änderungsdatum und Rolle suchen
  • Ich kann ein Benutzerkonto aktivieren oder deaktivieren
  • ich kann ein Benutzerkonto löschen
  • Die Aktionen Aktivieren, Deaktivieren, Löschen kommen ins Eventlog

Erwartete UI-Version auf der Landing-Page vom Server holen

Browser cachen die auth-app und die profil-app zu lange. Daher: Fußzeile Version aus environment, landing-page: UI-Version vom Server holen. Ist zwar sehr umständlich, aber es ist ziemlich blöd, wenn der Browser noch eine alte Version präsentiert

Datum des Logins muss in die DB

Aktuell wird das nur als event gespeichert. Aber um inaktive Benutzerkonten zu identifizieren, muss entweder das DATE_MODIFIED auch beim Login aktualisiert werden oder es muss eine Extraspalte LOGIN_DATE her.

Sammlmailversand

An selektierte Benutzer soll eine Mail versendet werden
Analog zu mk-admin-app wegen des smpt-provider limits

Grund des Löschens eines einzelnen Benutzerkontos muss mit ins Eventlog

Zur Nachvollziehbarkeit muss beim Löschen ein Kommentar abgegeben werden, der beim USER_DELETED-Event im body steht.

Grund: wenn ich ein Benutzerkonto lösche, möchte ich wissen, an welchem Tag ich zum Löschen aufgefordert wurde. Auch bei Sammellöschungen kann ein Kommentar ins Eventlog.

Info-Toggle Passwortregeln funktioniert nicht

Soll: beim Klick auf info wird die Passwortregel eingeblendet. Wenn sie eingeblendet wird. kann der eingeblendete Teil geschlossen werden => toggle-Effekt

Ist: wird nicht eingeblendet

Schulkürzel persistieren, falls mk-gateway nicht fertig wird

Manchmal wird nur der authprovider-Teil eines Benutzerkontos angelegt und der Mnikänguru-Teil verschwindet im Nirvana.
Damit alle Infos für das Nacherfassen des Minikänguruteils vorliegen, soll generell das Schulkürzel mit ins Event-Log beim Erzeugen eines neuen Benutzerkontos.

Für heike2718/minikaenguru#474 erforderlicher Kontext: das Schulkürzel, falls vorhanden. Dann ist klar, dass der Veranstaltertyp Lehrer ist.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.