Zum Inhalt springen
Farbschema wählenSprache wählen

Social-Login und Captcha aktivieren

Social-Login und Captcha sind beide standardmäßig aus. Beides wird rein über Konfiguration aktiviert — keine Datenbanktabelle, keine Migration, keine Lizenz (beides ist in der Community-Edition enthalten, siehe ADR 0064).

SupaCloud liefert Google und GitHub mit. Ein Provider erscheint erst dann auf der Anmeldeseite, wenn beide — Client-ID und Client-Secret — auflösbar sind; andernfalls fehlt der Button schlicht. So kann nie ein Button angeboten werden, der nicht funktionieren kann.

Lege beim Provider eine OAuth-App an und trage als autorisierte Redirect-URI ein:

<deine öffentliche URL>/api/auth/social/google/callback
<deine öffentliche URL>/api/auth/social/github/callback

<deine öffentliche URL> ist exakt die SUPACLOUD_PUBLIC_URL, unter der deine Instanz ausgeliefert wird (ohne abschließenden Schrägstrich). Angefragte Scopes sind openid email profile (Google) bzw. die User- und E-Mail-Scopes (GitHub) — genug, um eine verifizierte E-Mail-Adresse zu lesen, mehr nicht.

Variable Zweck
SUPACLOUD_SOCIAL_GOOGLE_CLIENT_ID Google-OAuth-Client-ID
SUPACLOUD_SOCIAL_GOOGLE_CLIENT_SECRET Google-OAuth-Client-Secret (vault-fähig)
SUPACLOUD_SOCIAL_GITHUB_CLIENT_ID GitHub-OAuth-Client-ID
SUPACLOUD_SOCIAL_GITHUB_CLIENT_SECRET GitHub-OAuth-Client-Secret (vault-fähig)

Starte den Server neu. Die Anmeldeseite zeigt nun je konfiguriertem Provider einen Button, und GET /config weist die aktivierten Methoden aus.

  • Eine neue E-Mail-Adresse legt ein Konto an, genau wie eine normale Registrierung (wartende Workspace-Einladungen für diese Adresse werden eingelöst).
  • Eine Adresse, die bereits zu einem Konto gehört, wird niemals automatisch zusammengeführt. Der Nutzer erfährt, dass ein Konto existiert, meldet sich mit seiner bisherigen Methode an und verknüpft den Provider unter Einstellungen → Verbundene Konten.
  • Ein Nutzer mit Authenticator-App durchläuft nach dem Provider-Redirect weiterhin seinen zweiten Faktor. Die 2FA gehört zu SupaCloud, nicht zum Provider.
  • Die letzte verbleibende Anmeldemethode lässt sich nie trennen.

SupaCloud nutzt ALTCHA, eine selbst gehostete Proof-of-Work-Prüfung. Der Browser löst sie per WebCrypto; der Server verifiziert sie zustandslos gegen eine HMAC-signierte Challenge. Es gibt kein Fremdskript und keinen Fremd-Netzwerkaufruf — es verlassen keine Besucherdaten deine Instanz.

Das Setzen des HMAC-Secrets schaltet die Funktion ein; alles Weitere ist optional.

Variable Default Zweck
SUPACLOUD_CAPTCHA_HMAC_SECRET (nicht gesetzt — Captcha aus) Signiert und verifiziert Challenges. Setzen zum Aktivieren.
SUPACLOUD_CAPTCHA_MAXNUMBER eingebaut Schwierigkeit des Proof-of-Work (Suchraum). Höher bremst Bots — und echte Browser.
SUPACLOUD_CAPTCHA_TTL_SECS eingebaut Gültigkeitsdauer einer Challenge.
SUPACLOUD_CAPTCHA_LOGIN_FAILURE_THRESHOLD eingebaut Fehlanmeldungen aus einer Quelle, bevor das Anmeldeformular ein Captcha scharfschaltet.

Wo es scharf wird. register, Magic-Link-Anforderung, Passwort-Reset-Anforderung und Bestätigungsmail-Anforderung verlangen immer eine Lösung. Die Anmeldung schaltet es erst nach LOGIN_FAILURE_THRESHOLD Fehlversuchen aus derselben Quelle scharf — eine normale Anmeldung sieht also nie eines.

Zwei unabhängige Limits schützen die Authentifizierungs-Endpunkte:

  • Das bestehende Per-IP-Transportlimit (tower_governor).
  • Ein Fixed Window pro Identität (5 / 60 s) auf login, register, magic, reset und verify — denn ein Per-IP-Limit stoppt keine verteilte Credential-Stuffing-Kampagne gegen ein einzelnes Konto.

Das Anmelde-Limit ist zusätzlich nach Quelle gescoped, damit jemand, der lediglich die E-Mail-Adresse eines Opfers kennt, nicht das gemeinsame Fenster erschöpfen und den rechtmäßigen Inhaber aussperren kann. Die mailversendenden Endpunkte bleiben rein per E-Mail geschlüsselt — dort begrenzt die Drossel den ausgehenden Mailversand.

Mit gesetztem SUPACLOUD_TRUSTED_FORWARDING wird die Client-IP aus X-Forwarded-For über denselben Rechts-nach-links-Lauf abgeleitet, der vertrauenswürdige Hops überspringt; lässt sich keine vertrauenswürdige Adresse ableiten, gilt der rohe Socket-Peer.

  1. Öffne die Anmeldeseite in einem privaten Fenster. Jeder konfigurierte Provider zeigt einen Button.

  2. Melde dich über den Provider mit einer der Instanz unbekannten Adresse an — es entsteht ein Konto und du bist angemeldet.

  3. Melde dich ab und versuche denselben Provider mit einer Adresse, die bereits ein Passwortkonto hat: Du erfährst, dass ein Konto existiert, und wirst nicht angemeldet.

  4. Hast du das Captcha aktiviert, sende das Anmeldeformular LOGIN_FAILURE_THRESHOLD mal mit falschem Passwort ab — der Prüfschritt erscheint.