Zum Inhalt

SSO und OIDC

Diese Seite erklärt Single Sign-On, OIDC und SCIM so weit, dass man die Seiten zu Authentik und die Anbindung einzelner Apps nachvollziehen kann. Wie Authentik bei uns eingerichtet ist, steht in Authentik.

Ein Konto für alle Apps

Mitglieder haben ein einziges Konto, und zwar in Authentik, unserem zentralen Login. Damit melden sie sich bei allen angebundenen Apps an, etwa im Forum, in der Nextcloud oder in HedgeDoc. Das nennt man Single Sign-On (SSO).

Die Apps prüfen selbst keine Passwörter. Sie schicken jeden, der sich anmelden will, zu Authentik und bekommen von dort zurück, wer sich angemeldet hat. Ist man bei Authentik schon angemeldet, geht das ohne erneute Passworteingabe.

Wer welche App nutzen darf und welche Rechte man innerhalb einer App hat, legen Gruppen in Authentik fest, nicht die Apps selbst; wie diese Gruppen aufgebaut sind und warum, steht in Gruppenmodell in Authentik.

Alle Apps nutzen einen zentralen Login.

  • Mitglieder werden an einer Stelle verwaltet: Wer neu in den Verein kommt, bekommt ein Konto und damit Zugang zu allem, was nötig ist. Wer austritt, wird an einer Stelle gesperrt und kommt danach in keine App mehr; niemand muss in jeder App einzeln nachsehen.
  • Mitglieder merken sich nur ein Passwort, und nur Authentik muss es sicher speichern.
  • Funktionen wie Passwort vergessen oder Zwei-Faktor-Anmeldung gibt es einmal für alle Apps.

Anmelden mit OIDC

Die Apps sprechen mit Authentik über den Standard OpenID Connect (OIDC). Eine Anmeldung läuft so ab:

sequenceDiagram
    actor B as Browser
    participant A as App<br>(z. B. HedgeDoc)
    participant K as Authentik

    B->>A: Seite aufrufen
    A->>B: weiterleiten zu Authentik<br>(mit Client-ID, Redirect-URI, Scopes)
    B->>K: Login-Seite
    K->>B: Benutzername und Passwort abfragen
    B->>K: Anmeldedaten
    K->>B: zurückleiten zur Redirect-URI<br>(mit einmaligem Code)
    B->>A: Code abgeben
    A->>K: Code + Client-Secret gegen Token tauschen
    K->>A: Token mit Claims<br>(Name, E-Mail, Gruppen)
    A->>B: angemeldet

Das Passwort sieht nur Authentik, nie die App. Den Code tauscht die App direkt bei Authentik gegen ein Token ein, ohne Umweg über den Browser; dabei weist sie sich mit ihrem Client-Secret aus.

Apps werden per OIDC angebunden. OIDC unterstützen fast alle Apps, die wir einsetzen. Jede App wird gleich angebunden, nur die Angaben unterscheiden sich.

Die Begriffe

Für jede angebundene App legen wir in Authentik einige Angaben fest, die in der App genauso eingetragen werden:

Client
Die App aus Sicht von Authentik. Jeder Client hat eine Client-ID, die ihn benennt und nicht geheim ist, und ein Client-Secret, ein Passwort, mit dem sich die App bei Authentik ausweist. Bei uns liegen beide als Secret beim Stack der App.
Redirect-URI
Die Adresse in der App, zu der Authentik den Browser nach dem Login zurückschickt, zum Beispiel https://md.garage-lab.de/auth/oauth2/callback. Authentik leitet nur an Adressen weiter, die für den Client eingetragen sind; so kann niemand den Login auf eine fremde Seite umlenken.
Scope
Was die App über die angemeldete Person erfahren möchte, etwa openid, profile (Name) und email. Authentik gibt nur heraus, was die App angefragt hat und was für sie freigegeben ist.
Claim
Eine einzelne Angabe über die Person im Token, zum Beispiel name, email oder sub, eine feste ID, an der die App die Person wiedererkennt.
Gruppen-Claim
Ein Claim groups mit den Gruppen, in denen die Person ist. Apps, die Rollen kennen, vergeben damit Rechte, etwa wer in der Nextcloud zum Vorstand gehört. Welche Gruppen eine App im Claim bekommt, steht in Gruppenmodell in Authentik.

Konten abgleichen mit SCIM

Mit OIDC erfährt eine App erst beim Login von einer Person. Manche Apps müssen ihre Konten aber schon vorher kennen, oder Konten sollen auch dann gesperrt werden, wenn sich die Person nie wieder anmeldet.

Dafür gibt es SCIM: Authentik schickt die Konten selbst an die App, legt sie dort an, hält Name, E-Mail und Gruppen aktuell und deaktiviert sie, wenn jemand austritt.

flowchart LR
    K["Authentik"]
    A["App<br>(z. B. Discourse)"]

    K -->|"SCIM: Konten anlegen,<br>ändern, deaktivieren"| A
    A -.->|"OIDC: Login"| K

Bei uns nutzt das Forum (Discourse) beides: SCIM für den Abgleich der Konten und OIDC für den Login. Warum, steht in Discourse.

Weiterlesen