Lösungsstrategie
Architekturprinzipien
Modularität:
Um eine bessere Wartbarkeit und Skalierbarkeit zu gewährleisten, ist die Anwendung auf verschiedene Services und Komponenten aufgeteilt.
Folgende Abbildung zeigt die Aufteilung der Anwendung in Frontend- und Backend-Anwendung, Datenbank und Identity-Provider:
architecture-beta
group elego(server)[elego]
group cloud(internet)[cloud]
service frontend(server)[elego Frontend] in elego
service backend(server)[elego Backend] in elego
service db(database)[Database] in elego
service idp(server)[IDP] in cloud
frontend:R --> L:backend
backend:R --> L:db
idp:T <-- B:frontend
idp:T <-- B:backend
Flexibilität
Um die unterschiedlichen Anforderungen unser Kunden zu erfüllen, ist elego auf Flexibilität ausgerichtet:
- Der Zugriff auf die Datenbank wird über ein Persistenz-Framework sichergestellt. So können verschiedene DBMS verwendet werden.
- Backend-Module haben klar definierte Schnittstellen. Dadurch können sie bei Bedarf durch individuelle Implementierungen ersetzt werden.
- Prozesse und Oberflächen sind individuell parametrierbar und können als gesamtes Parametrierung-Package exportiert/importiert werden.
Langlebigkeit
Bei der Auswahl von Technologien wird auf Langlebigkeit geachtet.
Sicherheit
Zum Schutz von Vertraulichkeit, Verfügbarkeit und Integrität sind folgende Massnahmen umgesetzt:
| Anforderung | Lösung |
|---|---|
| Authentifizierter Zugriff | Zugriff auf die Anwendung haben nur authentifizierte Benutzer. Die Authentisierung eines Benutzers erfolgt über einen OpenID Connect fähigen IDP (IdentityProvider). |
| Autorisierung von Funktionen | Die Autorisierung ist rollen basiert. Jeder Funktion (GUIs, Prozesse und Commands) kann die zur Ausführung benötigte Berechtigungen hinterlegt werden. |
| Sichtbarkeits-Beschränkung (Mandanten-Fähigkeit) | Jede Fach-Entität kann einem Tenant (Mandant) zugewiesen werden. Nur Benutzer, die für den Tenant berechtigt sind, haben Zugriff auf die Entität. |
| Schutz von Data in Transit | Daten werden ausschliesslich per HTTPS (TLS >= 1.2) übertragen |
| Schutz von Data in Rest | Anwendungsdaten werden an definierten Orten abgelegt. Diese sind vom Betreiber gegen unautorisiertem Zugriff zu schützen. Sind die Daten auf der Datenbank zu verschlüsseln, ist das mit Transparent data encryption (TDE) möglich. Der Performance-Impact ist gemäss Microsoft 3-5% |
| Nachvollziehbarkeit | Jede Business-Transaktion wird protokolliert. Für jede Entität ist parametrierbar, ob eine lückenlose Historie (Datum der Änderung, Bearbeiter, alter Wert, neuer Wert) geführt wird. |
| Schutz vor unbeabsichtigter Änderung | Für jeden Anwendungsfall ist parametrierbar, welche Daten änderbar sind. Dadurch wird verhindert, dass Daten ohne Bezug zum Anwendungsfall geändert werden. In File-Schnittstelle kann definiert werden, ob Files mehrmals eingelesen werden können. In REST-Schnittstellen kann definiert werden, ob eine identische Meldung, mehrfach verarbeitet wird |
| Schutz von Testumgebungen | Auf Testumgebungen können Emails-umgeleitet werden oder der Versand kann deaktiviert werden. PDF-Dokumente, die auf nicht produktiven Umgebungen aufbereitet werden, werden mit einem Wasserzeichen versehen |
| Schutz vor Dateninkonsistenz | Datenmanipulationen werden über das Persistenz-Framework innerhalb von Datenbank-Transaktionen durchgeführt. |
| Entkoppelung von Drittsystemen | Anbindungen an Drittsysteme werden wo möglich asynchron realisiert. Dadurch ist die Anwendung auch verfügbar, wenn ein angebundenes System nicht verfügbar ist. |
| Berücksichtigung OWASP-Top10 | Bei der Implementierunge werden die OWASP-Top10 berücksichtigt. |
Technologieauswahl
Backend-Anwendung:
Kern der Anwendung ist eine ASP.NET Core Anwendung, die eine REST-API bereitstellt. Es wird darauf geachtet, dass jeweils die aktuelle .NET Long Term Support (LTS) Version verwendet wird. Aktuell ist das .NET8.
Für das O/R-Mapping wird das Persistenz-Framework NHibernate eingesetzt. Es stellt sicher, dass verschiedene Datenbanken unterstützt werden können.
Die Suche basiert auf Lucene.NET, einem .NET-Library für performante Volltext-Suche.
Für das Logging wird das Logging-Library Serilog eingesetzt.
Die eingesetzte Basis-Technologie ist plattformunabhängig. Einige Module (z.B. Document-Templates, PDF-Bearbeitung, QR-Code-Detection) setzen jedoch Libraries ein, die Windows als Betriebsplattform voraussetzen. Aktuell wird daher ein Betrieb auf einem IIS in einer Windows-Umgebung empfohlen.
Längerfristig soll das Backend-API containerisiert auf Linux oder auf einem IIS unter Windows betrieben werden
Frontend-Anwendung:
Die Frontend-Anwendung ist als ASP.NET Core Anwendung umgesetzt. Die Singlepage Anwendung ist mit dem JavaScript Framework ExtJS von Sencha umgesetzt. Die Integration in die .NET Welt wird mit Ext.Direct sichergestellt.
Die Frontend-Anwendung lässt sich mit den gängigen Web-Browsern (z.B. Internet Explorer, Edge, Chrome, Firefox, Safari) ohne client-seitige Installation bedienen (Plugin-free). Das Frontend ist für die Verwendung mit Desktop-Geräten (PC, Notebook) vorgesehen.
Die eingesetzte Technologie ist plattformunabhängig. Die Frontendanwendung kann containerisiert auf Linux oder auf einem IIS unter Windows betrieben werden.
Datenbank:
Die Daten werden als relationale Daten in einer Microsoft SQL-Server Datenbank persistent gehalten. Alternativ wird das DBMS Oracle weiterhin unterstützt, um bestehende Installationen zu berücksichtigen.
Authentifizierung und Autorisierung:
elego nutzt die Autorisierungs- und Authentifizierungsmechanismen von OpenID Connect (OIDC). Als Identity Provider kann unser Eis Identity Provider oder ein anderer OIDC-fähiger IDP verwendet werden. Seit elego 51 ist auch eine direkte Anbindung an Azure Entra ID möglich.
Zur Umsetzung von OpenID Connect und OAuth 2.0 setzen wir auf das Duende Framework.