Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen RevisionVorhergehende ÜberarbeitungNächste Überarbeitung | Vorhergehende Überarbeitung | ||
| edpweb3:jwt_external [2024/12/19 11:35] – admin | edpweb3:jwt_external [2026/03/29 21:52] (aktuell) – WRAP-Tags entfernt (Plugin nicht verfügbar) tim | ||
|---|---|---|---|
| Zeile 1: | Zeile 1: | ||
| - | ====== Anmeldung aus Drittsystemen ====== | + | ====== Anmeldung aus Drittsystemen |
| - | Zur Anbindung an Drittsysteme | + | Zur Anbindung an Drittsysteme |
| - | Insbesondere bei größeren | + | Dies ist insbesondere für größere |
| - | Dazu muss dieser zunächst innerhalb der lokalen Konfigurationsdatei aktiviert werden. Im Nachfolgenden ist die Konfiguration beschrieben. | + | Die Authentifizierung erfolgt über ein **JSON Web Token (JWT)**, das vom Drittsystem erzeugt und kryptographisch signiert wird. edp:web prüft |
| - | ===== Konfiguration | + | ===== Funktionsweise |
| + | |||
| + | Der Anmeldevorgang läuft wie folgt ab: | ||
| + | |||
| + | - Das **Drittsystem** erzeugt ein JWT mit den Benutzerdaten (Name, Funktion, Rolle) und signiert es mit seinem **privaten Schlüssel**. | ||
| + | - Der Benutzer wird mit dem JWT an den edp: | ||
| + | - **edp:web** prüft die Signatur des Tokens mit dem hinterlegten **öffentlichen Schlüssel** des Drittsystems. | ||
| + | - Bei erfolgreicher Prüfung wird eine Sitzung erstellt und der Benutzer ist angemeldet. | ||
| - | In der edpweb.ini muss folgender Block ergänzt werden: | ||
| < | < | ||
| - | [JWT External] | + | Drittsystem |
| - | Aktiv=1 | + | |
| - | ;Angabe des Secrets für das JWT | + | │ |
| - | Secret=... | + | │ 2. Weiterleitung mit JWT ──────►│ |
| - | ; | + | │ │ 3. Signatur prüfen (Public Key) |
| - | FieldUsername=sub | + | |
| - | ; | + | │ |
| - | FieldFunktion=funktion | + | </ |
| - | ; | + | |
| - | FieldUserlevel=rolle | + | |
| - | ; | + | |
| - | FieldOrt=ort | + | |
| + | ===== Einrichtung ===== | ||
| + | |||
| + | ==== 1. Schlüsselpaar erzeugen ==== | ||
| + | |||
| + | Die Authentifizierung basiert auf einem **RSA-Schlüsselpaar** (asymmetrische Verschlüsselung). Das Drittsystem signiert das JWT mit dem privaten Schlüssel, edp:web prüft die Signatur mit dem öffentlichen Schlüssel. | ||
| + | |||
| + | Das Schlüsselpaar kann z.B. mit OpenSSL erzeugt werden: | ||
| + | |||
| + | < | ||
| + | openssl genrsa -out jwt_external_private.pem 2048 | ||
| + | openssl rsa -in jwt_external_private.pem -pubout -out jwt_external_public.pem | ||
| </ | </ | ||
| - | Innerhalb des erzeugten JWTs müssen folgende Inhalte im Claim enthalten sein: | + | * **jwt_external_private.pem** → Verbleibt beim Drittsystem (zum Signieren der Tokens) |
| + | * **jwt_external_public.pem** → Wird auf dem edp:web-Server hinterlegt (zum Prüfen der Tokens) | ||
| - | | + | **Wichtig:** // |
| + | Der private Schlüssel darf nicht an Dritte weitergegeben werden und sollte ausschließlich auf dem Drittsystem gespeichert sein. | ||
| + | // | ||
| - | Funktion. | + | ==== 2. Public Key auf dem Server hinterlegen ==== |
| - | Die Funktion definiert den Funktionsnamen, | + | Die Datei **jwt_external_public.pem** muss im Unterordner **keys/** des edp: |
| - | Benutzerrolle. | + | < |
| + | edpweb/ | ||
| + | └── keys/ | ||
| + | └── jwt_external_public.pem | ||
| + | </ | ||
| - | Hier muss die jeweilige Benutzerrolle angegeben werden, mit der der Benutzer in EDP Web angemeldet wird. | + | ==== 3. Konfiguration aktivieren ==== |
| - | Üblicherweise wären das Default, Abschnitt oder Abteilung. | + | In der **edpweb.ini** muss folgender Block ergänzt werden: |
| - | Weitere Informationen zu den Benutzerrollen finden Sie hier. | + | < |
| + | [JWT External] | ||
| + | Aktiv=1 | ||
| + | </ | ||
| - | Ortsfeld. | + | Nach der Änderung muss der edp: |
| - | Wenn der Benutzer mit der Abteilungsrolle angemeldet wird, muss hier zusätzlich noch das Ortsfeld angegeben werden. | + | ===== JWT-Format ===== |
| - | Sprich die Filterung des Einsatzzugriffs auf einen bestimmten Bereich. | + | Das Drittsystem muss ein JWT im folgenden Format erzeugen: |
| - | Weitere Informationen dazu finden Sie hier. | + | ==== Header ==== |
| - | Die Gültigkeit des JWTs sollte nur wenige Sekunden betragen, da es nur einmalig für die Anmeldung genutzt wird. | + | < |
| + | { | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| - | Die Konfiguration dazu erfolgt auf Ebene des Drittsystems. | + | Als Signaturalgorithmus wird ausschließlich **RS256** (RSA mit SHA-256) unterstützt. |
| - | Zuordnung der Claims | + | ==== Payload (Claims) ==== |
| - | Die jeweiligen Felder im GWT können über die Konfiguration zugeordnet werden. | + | < |
| + | { | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | } | ||
| + | </ | ||
| - | Wenn die Feldnamen die EDP erwartet, von denen des GWTs abweicht. | + | ^ Claim ^ Beschreibung ^ Pflicht ^ |
| + | | **sub** | Benutzername, unter dem der Benutzer in edp:web angemeldet wird | Ja | | ||
| + | | **funktion** | Funktionsname, | ||
| + | | **rolle** | Benutzerrolle: | ||
| + | | **ort** | Ortsfilter für den Einsatzzugriff (nur bei Rolle // | ||
| + | | **exp** | Ablaufzeitpunkt | ||
| - | Bitte beachten Sie darauf, dass das Secret eine ausreichende Komplexität besitzt. | + | **Tipp:** // |
| + | Die Gültigkeit des Tokens sollte nur wenige Sekunden betragen, da es ausschließlich für den einmaligen Anmeldevorgang genutzt wird. | ||
| + | // | ||
| ===== Aufruf des Endpoints ===== | ===== Aufruf des Endpoints ===== | ||
| - | Wenn der Endpoint | + | ==== Per HTTP GET ==== |
| + | |||
| + | < | ||
| + | https://< | ||
| + | </ | ||
| + | |||
| + | Diese Variante eignet sich für eine einfache Weiterleitung aus dem Drittsystem heraus (z.B. als Link oder Redirect). | ||
| + | |||
| + | ==== Per HTTP POST ==== | ||
| + | |||
| + | < | ||
| + | POST https://< | ||
| + | Authorization: | ||
| + | </ | ||
| + | |||
| + | ===== Konfiguration anpassen ===== | ||
| + | |||
| + | ==== Claim-Bezeichnungen ändern ==== | ||
| + | |||
| + | Falls das Drittsystem andere Bezeichnungen für die Claims verwendet, können diese in der **edpweb.ini** angepasst werden: | ||
| + | |||
| + | < | ||
| + | [JWT External] | ||
| + | Aktiv=1 | ||
| + | FieldUsername=sub | ||
| + | FieldFunktion=funktion | ||
| + | FieldUserlevel=rolle | ||
| + | FieldOrt=ort | ||
| + | </ | ||
| + | |||
| + | ^ INI-Feld ^ Standard ^ Beschreibung ^ | ||
| + | | FieldUsername | sub | Claim-Name für den Benutzernamen | | ||
| + | | FieldFunktion | funktion | Claim-Name für die Funktion | | ||
| + | | FieldUserlevel | rolle | Claim-Name für die Benutzerrolle | | ||
| + | | FieldOrt | ort | Claim-Name für das Ortsfeld | | ||
| + | |||
| + | **Beispiel: | ||
| < | < | ||
| - | https:// | + | FieldUserlevel=role |
| </ | </ | ||
| + | ===== Hinweise ===== | ||
| + | * Jede externe Anmeldung belegt einen **Lizenzplatz**. Stellen Sie sicher, dass ausreichend Lizenzen vorhanden sind. | ||
| + | * Externe Tokens können nicht serverseitig widerrufen werden. Die Gültigkeit wird ausschließlich über den **exp**-Claim im Token gesteuert. | ||
| + | * Es wird ausschließlich der Algorithmus **RS256** unterstützt. Tokens mit anderen Algorithmen (z.B. HS256, ES256) werden abgelehnt. | ||
| + | * Der Benutzername wird auf maximal **20 Zeichen**, die Funktion auf maximal **24 Zeichen** gekürzt. | ||