ADFS Authentication einrichten
Diese Anleitung führt Sie durch die Integration von RAMP mit Active Directory Federation Services (ADFS) für föderierte Authentifizierung und Single Sign-On.
Was ist ADFS-Authentifizierung?
Abschnitt betitelt „Was ist ADFS-Authentifizierung?“Active Directory Federation Services (ADFS) bietet föderiertes Identitäts- und Zugriffsmanagement über Organisationsgrenzen hinweg. Vorteile:
- Single Sign-On (SSO) – Benutzer authentifizieren sich einmal für mehrere Anwendungen
- Föderierte Authentifizierung – Funktioniert über Organisationen und Vertrauensstellungen hinweg
- Anspruchsbasierter Zugriff – Feinkörnige Autorisierung basierend auf Benutzerattributen
- Integration mit Active Directory – Vorhandenes Benutzerverzeichnis nutzen
Geeignet für: Organisationen mit vorhandener ADFS-Infrastruktur, föderierte Zugriffsszenarien (Partner, Tochtergesellschaften), Compliance-Anforderungen für zentralisierte Authentifizierung, Windows Server-Umgebungen.
Voraussetzungen
Abschnitt betitelt „Voraussetzungen“Bevor Sie beginnen, stellen Sie sicher, dass Sie Folgendes haben:
- ADFS-Server (Version 2016 oder höher für OIDC-Unterstützung)
- Active Directory-Domain
- SSL-Zertifikat auf dem ADFS-Server installiert
- Administratorzugriff auf die ADFS-Verwaltungskonsole
- RAMP-Deployment (Backend + Frontend)
Architekturübersicht
Abschnitt betitelt „Architekturübersicht“+--------------+ +--------------+| Browser |---(1) RAMP aufrufen---->| RAMP Web || (Client) | | (Frontend) |+--------------+ +--------------+ | | | (2) Weiterleitung zu ADFS | v |+--------------+ || ADFS |<---(3) Auth-Anfrage------------+| Server |+--------------+ | | (4) Benutzer authentifiziert sich v+--------------+ +--------------+| Active |<---(5) Benutzer prüfen--| ADFS || Directory | | Server |+--------------+ +--------------+ | (6) Tokens zurückgeben | <-----------------------------+Schnellstart
Abschnitt betitelt „Schnellstart“-
ADFS-Anwendung konfigurieren
Abschnitt betitelt „ADFS-Anwendung konfigurieren“Anwendungsgruppe hinzufügen
Abschnitt betitelt „Anwendungsgruppe hinzufügen“- ADFS-Verwaltungskonsole öffnen (
adfs.msc) - Zu Anwendungsgruppen navigieren
- Rechtsklick -> Anwendungsgruppe hinzufügen…
- Konfiguration:
- Name:
RAMP Application - Beschreibung:
RAMP Runbook Automation Platform - Vorlage: Webbrowser, der auf eine Webanwendung zugreift auswählen
- Weiter klicken
- Name:
Webanwendung konfigurieren
Abschnitt betitelt „Webanwendung konfigurieren“Native Anwendungseinstellungen:
- Name:
RAMP Web Client - Redirect-URI:
https://ramp.yourdomain.com/_auth/callback - Client-Bezeichner: (Automatisch generiert – für später notieren, z. B.
abc123-def456) - Weiter klicken
Zugriffssteuerungsrichtlinie:
- Alle zulassen auswählen (oder benutzerdefinierte Richtlinie erstellen)
- Weiter klicken
Zusammenfassung:
- Einstellungen überprüfen
- Weiter -> Schließen klicken
Weitere Redirect-URIs hinzufügen
Abschnitt betitelt „Weitere Redirect-URIs hinzufügen“Für Entwicklung und zusätzliche Endpunkte:
- Rechtsklick auf RAMP Application -> Eigenschaften
- Die Webbrowser-Anwendung auswählen
- Bearbeiten… klicken
- Hinzufügen klicken, um weitere Redirect-URIs hinzuzufügen:
https://ramp.yourdomain.com/_auth/callback(Produktion)http://localhost:5173/_auth/callback(Entwicklung)https://localhost:5173/_auth/callback(Entwicklung mit SSL)
- OK -> Übernehmen klicken
- ADFS-Verwaltungskonsole öffnen (
-
Claims-Regeln konfigurieren
Abschnitt betitelt „Claims-Regeln konfigurieren“Claims-Regeln ordnen Active Directory-Attribute den Tokens zu, die RAMP empfängt.
LDAP-Attribute als Claims hinzufügen
Abschnitt betitelt „LDAP-Attribute als Claims hinzufügen“- In der ADFS-Verwaltung Anwendungsgruppen erweitern
- Rechtsklick auf RAMP Application -> Eigenschaften
- Die Anwendung auswählen -> Bearbeiten… klicken
- Zur Registerkarte Ausstellungstransformationsregeln wechseln
- Regel hinzufügen… klicken
- Regelvorlage:
LDAP-Attribute als Claims senden - Weiter klicken
- Name der Claimregel:
AD-Attribute senden - Attributspeicher:
Active Directory - Zuordnungen konfigurieren:
LDAP-Attribut Ausgehender Claimtyp SAM-Account-NameName-ID E-Mail-AddressesE-Mail-Adresse Display-NameName Given-NameVorname SurnameNachname User-Principal-NameUPN - Fertig stellen -> OK -> Übernehmen klicken
Name-ID in Subject-Claim (sub) umwandeln
Abschnitt betitelt „Name-ID in Subject-Claim (sub) umwandeln“OIDC erfordert einen
sub-Claim:- Erneut Regel hinzufügen… klicken
- Regelvorlage:
Eingehenden Claim transformieren - Weiter klicken
- Name der Claimregel:
Name-ID in sub umwandeln - Eingehender Claimtyp:
Name-ID - Ausgehender Claimtyp:
Subject(odersubeingeben, falls nicht in der Dropdown-Liste) - Format der ausgehenden Name-ID: (leer lassen)
- Alle Claimwerte weiterleiten: Aktiviert
- Fertig stellen -> OK -> Übernehmen klicken
-
ADFS-Konfigurationsdetails abrufen
Abschnitt betitelt „ADFS-Konfigurationsdetails abrufen“OIDC-Discovery-Endpunkt überprüfen
Abschnitt betitelt „OIDC-Discovery-Endpunkt überprüfen“Browser öffnen und zu folgendem Adresse navigieren:
https://adfs.yourdomain.com/adfs/.well-known/openid-configurationErwartet: JSON-Dokument mit OIDC-Endpunkten
Wichtige Werte zum Notieren:
- Authority:
https://adfs.yourdomain.com/adfs - Autorisierungsendpunkt:
https://adfs.yourdomain.com/adfs/oauth2/authorize - Token-Endpunkt:
https://adfs.yourdomain.com/adfs/oauth2/token - UserInfo-Endpunkt:
https://adfs.yourdomain.com/adfs/userinfo
Client-ID notieren
Abschnitt betitelt „Client-ID notieren“Die Client-ID wurde im ersten Schritt automatisch generiert. So finden Sie sie:
- ADFS-Verwaltung -> Anwendungsgruppen -> RAMP Application
- Auf die Anwendung doppelklicken -> Eigenschaften
- Client-Bezeichner kopieren (z. B.
abc123-def456-ghi789)
- Authority:
-
RAMP-Frontend konfigurieren
Abschnitt betitelt „RAMP-Frontend konfigurieren“Erstellen oder aktualisieren Sie
.env.productioninsrc/RAMP.Web/:Terminal-Fenster # OIDC-Authentifizierung aktivierenVITE_OIDC_ENABLED=true# ADFS OIDC-KonfigurationVITE_OIDC_AUTHORITY=https://adfs.yourdomain.com/adfsVITE_OIDC_CLIENT_ID=your-client-id-from-step-1VITE_OIDC_REDIRECT_URI=https://ramp.yourdomain.com/_auth/callbackVITE_OIDC_POST_LOGOUT_REDIRECT_URI=https://ramp.yourdomain.comVITE_OIDC_SCOPE=openid profile email allatclaimsVITE_OIDC_RESPONSE_TYPE=code# API-EndpunktVITE_API_BASE_URL=https://ramp.yourdomain.com/apiTerminal-Fenster VITE_OIDC_ENABLED=trueVITE_OIDC_AUTHORITY=https://adfs.yourdomain.com/adfsVITE_OIDC_CLIENT_ID=your-dev-client-idVITE_OIDC_REDIRECT_URI=http://localhost:5173/_auth/callbackVITE_OIDC_POST_LOGOUT_REDIRECT_URI=http://localhost:5173VITE_OIDC_SCOPE=openid profile email allatclaimsKonfigurationshinweise:
- Der
allatclaims-Scope fordert alle konfigurierten Claims von ADFS an - Der
code-Response-Typ verwendet den Authorization Code-Flow (sicherste Option)
- Der
-
RAMP-Backend konfigurieren (Optional)
Abschnitt betitelt „RAMP-Backend konfigurieren (Optional)“Das Backend validiert Tokens, benötigt aber keine ADFS-spezifische Konfiguration. Aktualisieren Sie
appsettings.json:{"Jwt": {"Secret": "YourSecretKeyAtLeast32CharactersLong!","Issuer": "RAMP.API","Audience": "RAMP.Web","AccessTokenExpirationMinutes": 480,"RefreshTokenExpirationDays": 30}} -
Integration testen
Abschnitt betitelt „Integration testen“RAMP-Frontend starten:
Terminal-Fenster cd src/RAMP.Webnpm run devZu RAMP navigieren:
- Entwicklung:
http://localhost:5173 - Produktion:
https://ramp.yourdomain.com
Erwarteter Ablauf:
- Weiterleitung zur ADFS-Anmeldeseite
- Domain-Anmeldedaten eingeben
- Nach erfolgreicher Authentifizierung Weiterleitung zurück zu RAMP
- Name und E-Mail erscheinen in der RAMP-Benutzeroberfläche
Claims überprüfen:
- Browser-Entwicklertools öffnen (F12)
- Zur Netzwerk-Registerkarte wechseln
- Callback-Anfrage finden (z. B.
/_auth/callback?code=...) - JWT-Token prüfen (dekodieren unter jwt.io)
- Prüfen, ob Claims enthalten sind:
sub,email,name
- Entwicklung:
Erweiterte Konfiguration
Abschnitt betitelt „Erweiterte Konfiguration“Gruppenbasierte Zugriffssteuerung
Abschnitt betitelt „Gruppenbasierte Zugriffssteuerung“RAMP-Zugriff auf bestimmte Active Directory-Gruppen einschränken:
# PowerShell – Auf dem ADFS-Server ausführen$rule = @"@RuleName = "Permit RAMP Users Only"exists([Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "RAMP-Users"]) => issue(Type = "http://schemas.microsoft.com/authorization/claims/permit", Value = "true");"@
Set-AdfsRelyingPartyTrust -TargetName "RAMP Application" ` -IssuanceAuthorizationRules $ruleDamit können nur Benutzer in der AD-Gruppe “RAMP-Users” sich authentifizieren. Andere werden von ADFS abgewiesen (bevor RAMP erreicht wird).
Multi-Faktor-Authentifizierung (MFA)
Abschnitt betitelt „Multi-Faktor-Authentifizierung (MFA)“MFA für den RAMP-Zugriff vorschreiben:
# MFA für alle RAMP-Benutzer verlangenSet-AdfsRelyingPartyTrust -TargetName "RAMP Application" ` -AdditionalAuthenticationRules 'c:[] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/authenticationmethod", Value = "http://schemas.microsoft.com/claims/multipleauthn");'Dies erzwingt eine MFA-Herausforderung (SMS, Microsoft Authenticator usw.) bei der Anmeldung. Die MFA-Richtlinie wird von ADFS durchgesetzt, nicht von RAMP.
Benutzerdefinierte Claims für Rollen
Abschnitt betitelt „Benutzerdefinierte Claims für Rollen“AD-Gruppen auf Rollen-Claims abbilden:
# Beispiel: AD-Gruppe auf Rollen-Claim abbilden$ruleText = @"c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "(?i)^RAMP-Administrators$"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role", Value = "Administrator");
c:[Type == "http://schemas.microsoft.com/ws/2008/06/identity/claims/groupsid", Value =~ "(?i)^RAMP-Coordinators$"] => issue(Type = "http://schemas.microsoft.com/ws/2008/06/identity/claims/role", Value = "Coordinator");"@
Set-AdfsRelyingPartyTrust -TargetName "RAMP Application" ` -IssuanceTransformRules $ruleTextToken-Laufzeit-Konfiguration
Abschnitt betitelt „Token-Laufzeit-Konfiguration“Konfigurieren Sie, wie lange Tokens gültig bleiben:
# Zugriffstoken-Laufzeit auf 1 Stunde (60 Minuten) setzenSet-AdfsRelyingPartyTrust -TargetName "RAMP Application" ` -TokenLifetime 60
# "Immer Authentifizierung verlangen" deaktivieren, um Refresh-Tokens zu erlaubenSet-AdfsRelyingPartyTrust -TargetName "RAMP Application" ` -AlwaysRequireAuthentication $falseFehlerbehebung
Abschnitt betitelt „Fehlerbehebung“Fehler bei Redirect-URI-Nichtübereinstimmung
Abschnitt betitelt „Fehler bei Redirect-URI-Nichtübereinstimmung“Fehler: AADSTS50011: The reply URL specified in the request does not match
Lösung:
- Sicherstellen, dass
VITE_OIDC_REDIRECT_URIexakt mit der ADFS-Konfiguration übereinstimmt - In ADFS prüfen: Anwendungsgruppen -> RAMP -> Eigenschaften -> Bearbeiten -> Redirect-URIs
- Protokoll prüfen (
httpvs.https) - Abschließende Schrägstriche prüfen (manche Systeme sind streng)
- Portnummern müssen übereinstimmen (
:5173für Entwicklung, für Standard-HTTPS-Port 443 weglassen)
Ungültige Client-ID-Fehler
Abschnitt betitelt „Ungültige Client-ID-Fehler“Fehler: invalid_client
Lösung:
- Sicherstellen, dass
VITE_OIDC_CLIENT_IDexakt übereinstimmt (Groß-/Kleinschreibung beachten) - In ADFS prüfen: Anwendungsgruppen -> RAMP -> Eigenschaften -> Client-Bezeichner
- Sicherstellen, dass Sie die richtige Umgebung verwenden (Entwicklungs- vs. Produktions-Client-ID)
Fehlende Claims (Keine E-Mail oder Name)
Abschnitt betitelt „Fehlende Claims (Keine E-Mail oder Name)“Problem: Benutzer authentifiziert sich, aber E-Mail/Name erscheinen nicht in RAMP.
Lösung:
-
Claims-Regeln überprüfen:
- ADFS-Verwaltung -> Anwendungsgruppen -> RAMP -> Eigenschaften -> Bearbeiten
- Auf der Registerkarte Ausstellungstransformationsregeln sollte die Regel “AD-Attribute senden” angezeigt werden
-
AD-Attribute des Benutzers prüfen:
Terminal-Fenster Get-ADUser -Identity username -Properties mail, displayName, givenName, snSicherstellen, dass der Benutzer ausgefüllte Attribute hat
-
Claims im Token testen:
- JWT-Token unter jwt.io dekodieren
- Prüfen, ob Claims vorhanden sind:
email,name,given_name,family_name
-
Fehlende Claims-Regeln hinzufügen (siehe Schritt 2)
CORS-Fehler
Abschnitt betitelt „CORS-Fehler“Problem: Browser-Konsole zeigt CORS-Richtlinienfehler.
Lösung:
ADFS unterstützt CORS für den Token-Endpunkt standardmäßig nicht. Stellen Sie sicher, dass Sie verwenden:
- Authorization Code-Flow (nicht Implicit Flow)
- OIDC-Bibliothek, die den Token-Austausch serverseitig handhabt
- RAMPs Frontend verwendet die
oidc-client-ts-Bibliothek korrekt
In .env überprüfen:
VITE_OIDC_RESPONSE_TYPE=code # NICHT "id_token" oder "token"Benutzer authentifiziert, aber keine Rollen in RAMP
Abschnitt betitelt „Benutzer authentifiziert, aber keine Rollen in RAMP“Problem: Benutzer meldet sich erfolgreich an, hat aber keine Berechtigungen in RAMP.
Lösung:
Dieses Verhalten ist für ADFS-Erstbenutzer erwartet. Ein Administrator muss Rollen zuweisen:
- Als RAMP-Administrator anmelden
- Zu Admin -> Benutzer navigieren
- Benutzer suchen (nach E-Mail)
- Rollen zuweisen klicken
- Geeignete Rollen zuweisen (z. B. Benutzer, Koordinator, Administrator)
Alternativ können Sie Bootstrap-Administratoren konfigurieren, um Admin-Rollen automatisch zuzuweisen.
Sicherheits-Best-Practices
Abschnitt betitelt „Sicherheits-Best-Practices“Produktions-Checkliste
Abschnitt betitelt „Produktions-Checkliste“- Überall HTTPS verwenden – RAMP und ADFS
- Gültige SSL-Zertifikate – Von einer vertrauenswürdigen CA (nicht selbstsigniert)
- Kurze Token-Laufzeiten – 60 Minuten für Zugriffstoken
- MFA aktivieren – Für alle Benutzer oder sensible Rollen
- Gruppenbasierte Zugriffssteuerung – Auf autorisierte AD-Gruppen einschränken
- Minimale Claims – Nur notwendige Benutzerattribute senden
- Audit-Protokollierung – In ADFS aktivieren (Anwendungs- und Dienstprotokolle -> AD FS -> Admin)
- Regelmäßige Updates – ADFS- und Windows Server-Patches anwenden
- Netzwerksicherheit – Firewall-Regeln, ADFS-Zugriff einschränken
Claims-Sicherheit
Abschnitt betitelt „Claims-Sicherheit“In Claims einschließen:
- Benutzer-ID (
sub) - E-Mail-Adresse
- Anzeigename
- Übergeordnete Rollen (optional)
NIEMALS in Claims einschließen:
- Sozialversicherungsnummern
- Passwörter oder Passwort-Hashes
- Sensible persönliche Informationen
- Detaillierte Zugriffsberechtigungen (stattdessen das RAMP-Rollensystem verwenden)
Token-Speicherung
Abschnitt betitelt „Token-Speicherung“RAMP speichert Tokens im Browser-Sitzungsspeicher:
- Wird beim Schließen des Browser-Tabs/-Fensters geleert
- Für andere Websites nicht zugänglich
- Nicht auf der Festplatte gespeichert
- Benutzer müssen sich nach einem Browser-Neustart erneut anmelden (by design)
Benutzerbereitstellung
Abschnitt betitelt „Benutzerbereitstellung“Automatische Benutzererstellung
Abschnitt betitelt „Automatische Benutzererstellung“Wenn sich ein Benutzer zum ersten Mal über ADFS authentifiziert:
- RAMP empfängt Claims von ADFS (sub, email, name)
- RAMP prüft, ob ein Benutzer mit dieser
ProviderSubjectIdvorhanden ist - Falls nicht, erstellt RAMP ein neues Benutzerkonto:
- Benutzername: Aus dem
sub- oderupn-Claim - E-Mail: Aus dem
email-Claim - Anzeigename: Aus dem
name-Claim - IdentityProvider:
ADFS - ProviderSubjectId: Eindeutiger Bezeichner von ADFS
- Benutzername: Aus dem
- Benutzer ist angemeldet, hat aber standardmäßig keine Rollen
- Administrator muss Rollen zuweisen (oder Bootstrap-Administratoren verwenden)
Erforderliche Claims
Abschnitt betitelt „Erforderliche Claims“ADFS muss diese Claims für RAMP bereitstellen:
| Claim | Zweck | LDAP-Quelle |
|---|---|---|
sub | Eindeutiger Benutzerbezeichner | SAM-Account-Name oder UPN |
email | E-Mail-Adresse des Benutzers | E-Mail-Addresses |
name | Anzeigename | Display-Name |
Wenn einer fehlt, schlägt die automatische Benutzerbereitstellung fehl.
Migration von WS-Federation zu OIDC
Abschnitt betitelt „Migration von WS-Federation zu OIDC“Wenn Sie derzeit WS-Federation mit einer älteren ADFS-Version verwenden:
Warum zu OIDC migrieren?
Abschnitt betitelt „Warum zu OIDC migrieren?“- Moderner Standard – Branchenstandard-Authentifizierungsprotokoll
- Bessere SPA-Unterstützung – Für Single-Page-Anwendungen konzipiert
- JSON-basiert – Einfacher als XML (SAML/WS-Fed)
- Größeres Ökosystem – Mehr Bibliotheken und Tools
- Mobilfreundlich – Bessere Unterstützung für native Apps
Migrationsschritte
Abschnitt betitelt „Migrationsschritte“- ADFS auf 2016 oder höher aktualisieren (für OIDC erforderlich)
- OIDC-Anwendung in ADFS hinzufügen (parallel zur bestehenden WS-Fed)
- OIDC in der Entwicklungsumgebung testen
- RAMP-Frontend aktualisieren, um OIDC-Konfiguration zu verwenden
- Deployment und Überwachung
- WS-Fed-Anwendung dekommissionieren nach erfolgreicher Migration
Nächste Schritte
Abschnitt betitelt „Nächste Schritte“Nach der Konfiguration der ADFS-Authentifizierung:
- Bootstrap-Administratoren-Anleitung – Admin-Rollen automatisch zuweisen
- MFA-Einrichtung – Zusätzliche Sicherheitsebene hinzufügen
- Authentifizierungsübersicht – Alle Authentifizierungsanbieter vergleichen
- OIDC-Einrichtung – Generische OIDC-Konfigurationsanleitung