Zum Inhalt springen
Limen

Sicherheit

Mehrere Schichten, keine davon geheim

Ein Identitätsdienst ist der Schlüsselbund einer Organisation. Deshalb liegt hier offen, wie Limen ihn verwahrt – und der Quellcode dazu ebenfalls.

  • Passwörter mit argon2id

    Gehasht mit argon2id, dem Verfahren, das die OWASP für neue Anwendungen empfiehlt. Auch wer die Datenbank in die Hände bekommt, kann Passwörter nicht einfach zurückrechnen.

  • Verschlüsselt gespeicherte Geheimnisse

    Private Signaturschlüssel und TOTP-Secrets liegen mit AES-256-GCM verschlüsselt in der Datenbank. Der Schlüssel dafür steht in der Umgebungskonfiguration, nicht in der Datenbank.

  • Drosselung bei Fehlversuchen

    Die Anmeldung wird pro Kombination aus Herkunftsadresse und Konto gebremst, die Zwei-Faktor-Prüfung zusätzlich kontogebunden. Durchprobieren wird dadurch unattraktiv.

  • Refresh-Token mit Reuse-Detection

    Jede Einlösung ersetzt das Token. Wird ein bereits verbrauchtes noch einmal vorgelegt, war es vermutlich gestohlen – die gesamte Token-Kette wird sofort verworfen.

  • Exakter Abgleich der Redirect-URIs

    Rückleitungsziele müssen zeichengenau mit einem hinterlegten Eintrag übereinstimmen. Keine Platzhalter, keine Präfix-Regeln – offene Weiterleitungen entstehen so gar nicht erst.

  • Content-Security-Policy mit Nonce

    Jede Antwort trägt eine frische Nonce; Skripte ohne passende Nonce führt der Browser nicht aus. Das nimmt eingeschleustem Code die Grundlage.

  • Step-up für sensible Schritte

    Wer zweite Faktoren verwaltet, muss sich erneut ausweisen – auch bei bestehender Sitzung. Ein kurz unbeaufsichtigter Rechner reicht nicht aus, um die Absicherung zu entfernen.

  • Verwaltung nur mit zweitem Faktor

    Der Verwaltungsbereich verlangt eine MFA-Sitzung. Ein Konto mit Verwaltungsrechten, aber ohne zweiten Faktor, kommt schlicht nicht hinein.

  • Sofortige Sperre bei Deaktivierung

    Ein deaktiviertes Konto verliert augenblicklich Anmeldung, Sitzungen und Refresh-Tokens. Es gibt keinen Rest-Zugang, der in einer einzelnen Anwendung übrig bleibt.

Zustimmung

Fremde Anwendungen fragen sichtbar

Eine Anwendung, die nicht als „first party“ registriert ist, bekommt keine Daten, bevor die betroffene Person zugestimmt hat. Was übermittelt wird, steht im Klartext daneben – nicht in einer Fußnote.

  • Zustimmung wird pro Anwendung erteilt, nicht pauschal
  • Die Liste zeigt genau die Angaben, die der angeforderte Scope umfasst
  • Erteilte Zustimmungen lassen sich unter „Mein Konto“ jederzeit widerrufen
  • Eigene, als „first party“ eingetragene Anwendungen überspringen den Schritt bewusst
Zustimmungsdialog „Zugriff erlauben“: die Fachschafts-Cloud möchte sich mit dem Konto anmelden, darunter die Liste der übermittelten Angaben sowie „Ablehnen“ und „Zustimmen“.

Standards

Prüfbar statt behauptet

Das Discovery-Dokument beschreibt in Maschinenform, was die Instanz unterstützt. Jede Anwendung liest es beim Start – und ihr könnt es genauso aufrufen.

Signatur
ID- und Access-Token als JWT, signiert mit RS256. Die öffentlichen Schlüssel stehen im JWKS und lassen sich von jeder Anwendung selbst prüfen.
Absicherung des Codes
Nur der Authorization Code Flow, nur mit PKCE und der Methode S256. Implicit Flow und ähnliche Altlasten sind nicht vorgesehen.
Datensparsamkeit
Drei Scopes: openid für die Benutzerkennung, profile für Name und Avatar, email für die Adresse. Mehr gibt es nicht zu holen.
/.well-known/openid-configuration
{  "issuer": "https://id.beispiel.de",  "authorization_endpoint": "https://id.beispiel.de/authorize",  "token_endpoint": "https://id.beispiel.de/token",  "userinfo_endpoint": "https://id.beispiel.de/userinfo",  "jwks_uri": "https://id.beispiel.de/.well-known/jwks.json",  "response_types_supported": ["code"],  "grant_types_supported": ["authorization_code", "refresh_token"],  "id_token_signing_alg_values_supported": ["RS256"],  "scopes_supported": ["openid", "profile", "email"],  "code_challenge_methods_supported": ["S256"]}

Gekürzt. Die vollständige Antwort enthält zusätzlich die Endpunkte für Abmeldung, Widerruf und Introspektion sowie die unterstützten Claims.

Betriebshygiene

Schlüssel wechseln, Handlungen festhalten

Zwei Dinge, die im Alltag gern liegen bleiben – und die Limen deshalb so einfach wie möglich macht.

Zwei RS256-Schlüssel nebeneinander, beide mit Kennung und Erstellungszeitpunkt: der um 14:28 Uhr erzeugte ist aktiv, der um 12:57 Uhr erzeugte läuft aus.

Rotation ohne Ausfall

Ein Klick erzeugt einen neuen aktiven Schlüssel. Der bisherige bleibt für eine Karenzzeit im JWKS, damit bereits ausgestellte Tokens bis zu ihrem Ablauf prüfbar bleiben. Niemand wird dabei abgemeldet.

Acht Protokolleinträge, jeder mit handelnder Person und betroffenem Konto – etwa „Signaturschlüssel rotiert von m.haltenbach“ und „Konto bearbeitet von j.weidenfeld, Ziel Nele Sandkühler, Name korrigiert“.

Lückenloses Protokoll

Konten anlegen, Passwörter zurücksetzen, Rechte vergeben, Schlüssel rotieren – jede verwaltende Handlung landet im Protokoll, mit Grund, sofern einer angegeben wurde.

Daten

Was Limen über Menschen weiß

Die vollständige Liste. Alles davon liegt in eurer Datenbank, auf eurem Server.

Was gespeichert wird

  • Benutzername, Anzeigename und – optional – eine E-Mail-Adresse
  • Passwort-Hash, verschlüsseltes TOTP-Secret, registrierte Passkeys
  • Profilbild, sofern eines hochgeladen wurde
  • Anmeldeversuche und verwaltende Handlungen mit Zeitpunkt und Herkunftsadresse

Was nicht passiert

  • Keine Telemetrie und keine Nutzungsstatistik nach außen
  • Keine Schriftarten, Skripte oder Bilder von fremden Servern
  • Kein Versand von E-Mails, also auch keine Weitergabe an einen Mail-Anbieter
  • Keine Auswertung über die Anmeldung hinaus

Ob und wie lange Anmeldeversuche aufbewahrt werden, entscheidet ihr selbst – es ist eure Datenbank. Für die Bewertung nach DSGVO ist die betreibende Organisation verantwortlich; diese Seite ersetzt keine Rechtsberatung.

Vertrauen ist gut, Quellcode ist besser

Alles auf dieser Seite lässt sich nachlesen. Limen steht vollständig unter der AGPL-3.0 – einschließlich der Stellen, an denen Passwörter geprüft und Tokens signiert werden.