SAML (Security Assertion Markup Language) ist ein XML-basiertes Protokoll und Industriestandard, der eine zentralisierte Authentifizierung von Clients für den Zugang zu föderierten Sicherheitsdomänen ermöglicht. SAML erleichtert den Endnutzern den Zugang zu Anwendungen und Diensten, da die Notwendigkeit mehrerer Anmeldungen und Kennwörter entfällt. SAML vereinfacht auch den Verwaltungsaufwand, da weniger Anrufe beim Helpdesk wegen Passwortproblemen eingehen und der Lebenszyklus von Benutzereinheiten besser kontrolliert werden kann.

Eine grundlegende SAML-Implementierung besteht aus einem Client, einem Service Provider (SP) und einem Identity Provider (IdP). Das folgende Diagramm zeigt die Kommunikationsflüsse zwischen den Entitäten.

Der SAML-Authentifizierungsfluss basiert auf zwei Entitäten:

SAML-Anfrage:

SAML-Antwort:

Schlüsselgenerierung:

Der Identity Provider (IdP) generiert einen privaten Schlüssel und einen öffentlichen Schlüssel. Er signiert die Assertion mit dem privaten Schlüssel. Der öffentliche Schlüssel wird mit dem Service Provider (SP) geteilt, der ihn verwendet, um die SAML-Antwort zu überprüfen und den Benutzer anzumelden.

Von Hackern ausgenutzte SAML-Schwachstellen:

Implementierung

Die Implementierung erfolgt typischerweise in drei Schritten:

Identitätsanbieter (IdP) konfigurieren:

  1. Beispiele: Microsoft Entra ID, Okta, Auth0, Keycloak.
  2. Du definierst dort die Benutzer, Gruppen und die SAML-Metadaten (z. B. EntityID, Zertifikate, Endpunkte).

Dienstanbieter (SP) konfigurieren:

  1. Das ist die Anwendung, die SSO nutzen soll.
  2. Du integrierst eine SAML-Bibliothek oder Middleware (z. B. passport-saml für Node.js, python-saml für Python).
  3. Du importierst die Metadaten des IdP und definierst die Assertion Consumer Service (ACS) URL, also den Endpunkt, an dem die SAML-Antwort empfangen wird.

Metadaten austauschen:

  1. Beide Seiten tauschen ihre SAML-Metadaten aus, um Vertrauen aufzubauen.
  2. Danach wird die Authentifizierung über Redirects und POST-Requests abgewickelt.