Zum Hauptinhalt springen
FIM One unterstützt Social Login über GitHub, Google, Discord und Feishu (Lark). Jeder Anbieter, dessen Anmeldedaten in der Umgebung vorhanden sind, zeigt automatisch eine Login-Schaltfläche auf der Anmeldeseite an – keine Codeänderungen erforderlich. Callback-URL-Muster — registrieren Sie diese genaue URL in der Entwicklerkonsole jedes Anbieters:
{API_BASE_URL}/api/auth/oauth/{provider}/callback
API_BASE_URL ist die extern erreichbare Adresse des FIM One-Backends. Beispiele:
SzenarioBeispiel-Callback-URL
Lokale Entwicklunghttp://localhost:8000/api/auth/oauth/github/callback
Dedizierte API-Subdomainhttps://api.yourdomain.com/api/auth/oauth/github/callback
Reverse-Proxy (gleiche Domain)https://yourdomain.com/api/auth/oauth/github/callback

GitHub

Entwicklerkonsole: https://github.com/settings/developers
  1. Klicken Sie auf OAuth AppsNew OAuth App.
  2. Füllen Sie folgende Felder aus:
    • Application name — beliebiger Name (z. B. FIM One)
    • Homepage URL — Ihre Frontend-URL (z. B. https://yourdomain.com)
    • Authorization callback URLhttps://yourdomain.com/api/auth/oauth/github/callback
  3. Klicken Sie auf Register application, dann auf Generate a new client secret.
  4. Kopieren Sie die Client ID und das generierte Client Secret in Ihre .env.
Automatisch angeforderte Scopes: read:user, user:email GitHub-Konten mit einer privaten primären E-Mail werden korrekt verarbeitet — FIM One ruft immer die primäre verifizierte E-Mail von /user/emails ab, nicht die öffentliche Profil-E-Mail.
GITHUB_CLIENT_ID=Ov23li...
GITHUB_CLIENT_SECRET=...

Google

Entwicklerkonsole: https://console.cloud.google.com/apis/credentials
  1. Klicken Sie auf + CREATE CREDENTIALSOAuth client ID.
  2. Falls aufgefordert, konfigurieren Sie zunächst den OAuth consent screen (setzen Sie User Type auf “External” für persönliche/öffentliche Apps).
  3. Setzen Sie Application type auf Web application.
  4. Fügen Sie unter Authorized redirect URIs hinzu:
    https://yourdomain.com/api/auth/oauth/google/callback
    
  5. Klicken Sie auf Create, dann kopieren Sie die Client ID und das Client Secret.
Automatisch angeforderte Bereiche: openid, email, profile
Hinweis: Während der Entwicklung zeigt der Zustimmungsbildschirm eine Warnung “This app is not verified” an. Sie können diese zum Testen überspringen. Veröffentlichen Sie den Zustimmungsbildschirm, wenn Sie die Warnung für Endbenutzer entfernen möchten.
GOOGLE_CLIENT_ID=12345678-abc.apps.googleusercontent.com
GOOGLE_CLIENT_SECRET=GOCSPX-...

Discord

Entwicklerkonsole: https://discord.com/developers/applications
  1. Klicken Sie auf New Application und geben Sie einen Namen ein.
  2. Klicken Sie in der linken Seitenleiste auf OAuth2.
  3. Klicken Sie unter Redirects auf Add Redirect und geben Sie Folgendes ein:
    https://api.yourdomain.com/api/auth/oauth/discord/callback
    
  4. Kopieren Sie die Client ID (oben auf der OAuth2-Seite angezeigt) und klicken Sie auf Reset Secret, um das Client Secret anzuzeigen.
Automatisch angeforderte Bereiche: identify, email
Discord garantiert keine verifizierte E-Mail für alle Konten. Wenn ein Benutzer seine E-Mail bei Discord nicht verifiziert hat, kann das Feld email null sein. FIM One erstellt das Konto in diesem Fall mit einer Null-E-Mail — der Benutzer kann später eine in den Einstellungen hinzufügen.
DISCORD_CLIENT_ID=123456789012345678
DISCORD_CLIENT_SECRET=...

Feishu (Lark)

Nur Mandanten-Bereich. Feishu-Eigenanwendungen (自建应用) können nur Benutzer innerhalb des gleichen Unternehmens-Mandanten authentifizieren, der die App erstellt hat. Benutzer von anderen Feishu-Mandanten sehen eine Fehlermeldung “keine Berechtigung”. Das bedeutet, dass Feishu OAuth nicht für öffentliche SaaS-Bereitstellungen geeignet ist, bei denen Benutzer aus verschiedenen Organisationen stammen. Es funktioniert gut für private / Einzelorganisations-Bereitstellungen, bei denen alle Benutzer zum gleichen Feishu-Mandanten gehören.Um mandantenübergreifende Feishu-Anmeldung zu unterstützen, müssen Sie die App im Feishu App Directory (应用商店) veröffentlichen und Feishus Überprüfungsprozess durchlaufen — was komplex ist und strenge Anforderungen hat.
Entwicklerkonsole: https://open.feishu.cn/app
  1. Klicken Sie auf Create AppIn-house app (自建应用). Unternehmens- oder Geschäftskonten sind erforderlich — Feishu OAuth ist nicht für persönliche Konten verfügbar.
  2. Unter Permissions & Scopes suchen Sie nach und aktivieren Sie:
    • contact:user.email:readonly
  3. Unter Security SettingsRedirect URL fügen Sie Ihre Callback-URL hinzu:
    https://yourdomain.com/api/auth/oauth/feishu/callback
    
  4. Kopieren Sie die App ID und App Secret aus dem Abschnitt Credentials & Basic Info.
Bereiche, die in der Konsole konfiguriert sind (nicht in der Autorisierungs-URL): contact:user.email:readonly
Hinweis: Feishu verwendet App ID / App Secret statt der Standard-Benennungen Client ID / Client Secret. Die Umgebungsvariablennamen spiegeln dies wider: FEISHU_APP_ID und FEISHU_APP_SECRET.
FEISHU_APP_ID=cli_a1b2c3d4e5f6...
FEISHU_APP_SECRET=...

Wichtig: Feishu-E-Mail-Verhalten

Die Feishu-Benutzerinformations-API (authen/v1/user_info) gibt die Unternehmenskontakt-E-Mail (联系邮箱) des Benutzers zurück — die Adresse, die vom Organisationsadministrator in der Feishu-Verwaltungskonsole konfiguriert wurde. Dies ist nicht die persönliche Feishu-Login-E-Mail des Benutzers. Konsequenzen:
  • Benutzer, deren Organisationsadministrator keine Kontakt-E-Mail konfiguriert hat, erhalten ein leeres E-Mail-Feld von der API, obwohl sie ein gültiges Feishu-Konto haben.
  • Benutzer mit persönlichen Feishu-Konten (nicht Teil eines Unternehmens) erhalten immer ein leeres E-Mail-Feld.
FIM One behandelt dies elegant: siehe Account Binding Rules unten.

Kontobindungsregeln

Registrierte Benutzer können zusätzliche OAuth-Anbieter über Einstellungen → Konto verknüpfen. Die folgenden Regeln gelten, wenn ein Benutzer eine Bindung initiiert:

Allgemeine Regel (GitHub, Google, Discord)

Die vom OAuth-Anbieter zurückgegebene E-Mail muss mit der registrierten E-Mail des FIM-Kontos übereinstimmen. Dies verhindert, dass versehentlich das Social-Media-Konto einer anderen Person mit Ihrem FIM-Konto verknüpft wird. Wenn die E-Mails nicht übereinstimmen, wird die Bindung mit einem email_mismatch-Fehler abgelehnt.

Feishu-Ausnahme

Da die API von Feishu die E-Mail-Adresse des Unternehmenskontakts anstelle der Anmelde-E-Mail zurückgibt und dieses Feld für persönliche Konten oder Konten in Organisationen, in denen der Administrator es nicht konfiguriert hat, häufig leer ist, folgt die E-Mail-Abgleichsprüfung für Feishu einer lockereren Regel:
  • Beide Seiten haben eine E-Mail → die E-Mails müssen übereinstimmen (gleiche Prüfung wie bei anderen Anbietern).
  • Eine Seite hat keine E-Mail (Feishu hat leer zurückgegeben oder das FIM-Konto hat keine E-Mail) → die Bindung erfolgt allein auf Basis der ticketgestützten Authentifizierung.

Feishu-Anmeldung (noch nicht gebunden)

Wenn sich ein Benutzer zum ersten Mal über Feishu anmeldet (keine vorhandene Bindung):
  1. FIM One sucht nach einem vorhandenen Konto, dessen E-Mail mit der Feishu-Unternehmenskontakt-E-Mail übereinstimmt.
  2. Wenn eine Übereinstimmung gefunden wird, wird das Feishu-Konto automatisch an dieses vorhandene FIM-Konto gebunden und der Benutzer wird angemeldet.
  3. Wenn keine Übereinstimmung vorhanden ist (auch wenn die E-Mail leer ist), wird ein neues FIM-Konto erstellt, das durch die Feishu open_id identifiziert wird. Das Konto hat eine leere E-Mail, die der Benutzer später in den Einstellungen ausfüllen kann.

Umgebungsvariablen – Kurzreferenz

VariableAnbieterErforderlichBeschreibung
GITHUB_CLIENT_IDGitHubBeideGitHub OAuth App Client-ID
GITHUB_CLIENT_SECRETGitHubBeideGitHub OAuth App Client-Secret
GOOGLE_CLIENT_IDGoogleBeideGoogle OAuth 2.0 Client-ID
GOOGLE_CLIENT_SECRETGoogleBeideGoogle OAuth 2.0 Client-Secret
DISCORD_CLIENT_IDDiscordBeideDiscord OAuth2 Anwendungs-Client-ID
DISCORD_CLIENT_SECRETDiscordBeideDiscord OAuth2 Anwendungs-Client-Secret
FEISHU_APP_IDFeishuBeideFeishu In-House App-ID (Hinweis: nicht CLIENT_ID)
FEISHU_APP_SECRETFeishuBeideFeishu In-House App-Secret
FRONTEND_URLAlleProdWohin der Browser nach Abschluss von OAuth umgeleitet wird (z. B. https://yourdomain.com)
API_BASE_URLAlleProdExtern erreichbare Backend-URL, wird zum Erstellen von Callback-URLs verwendet
NEXT_PUBLIC_API_URLAlleProdBrowser-seitige API-URL für OAuth-Umleitungen – wird zur Build-Zeit eingebettet
„Erforderlich: Beide” bedeutet, dass sowohl _ID als auch _SECRET (oder _APP_ID und _APP_SECRET für Feishu) zusammen gesetzt werden müssen; das Setzen von nur einem hat keine Auswirkung.
Siehe Umgebungsvariablen für die vollständige Dokumentation von FRONTEND_URL, API_BASE_URL und NEXT_PUBLIC_API_URL.