API_BASE_URL ist die extern erreichbare Adresse des FIM One-Backends. Beispiele:
| Szenario | Beispiel-Callback-URL |
|---|---|
| Lokale Entwicklung | http://localhost:8000/api/auth/oauth/github/callback |
| Dedizierte API-Subdomain | https://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- Klicken Sie auf OAuth Apps → New OAuth App.
- 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 URL —
https://yourdomain.com/api/auth/oauth/github/callback
- Application name — beliebiger Name (z. B.
- Klicken Sie auf Register application, dann auf Generate a new client secret.
- Kopieren Sie die Client ID und das generierte Client Secret in Ihre
.env.
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.
- Klicken Sie auf + CREATE CREDENTIALS → OAuth client ID.
- Falls aufgefordert, konfigurieren Sie zunächst den OAuth consent screen (setzen Sie User Type auf “External” für persönliche/öffentliche Apps).
- Setzen Sie Application type auf Web application.
- Fügen Sie unter Authorized redirect URIs hinzu:
- Klicken Sie auf Create, dann kopieren Sie die Client ID und das Client Secret.
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.
Discord
Entwicklerkonsole: https://discord.com/developers/applications- Klicken Sie auf New Application und geben Sie einen Namen ein.
- Klicken Sie in der linken Seitenleiste auf OAuth2.
- Klicken Sie unter Redirects auf Add Redirect und geben Sie Folgendes ein:
- Kopieren Sie die Client ID (oben auf der OAuth2-Seite angezeigt) und klicken Sie auf Reset Secret, um das Client Secret anzuzeigen.
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 Feldnullsein. FIM One erstellt das Konto in diesem Fall mit einer Null-E-Mail — der Benutzer kann später eine in den Einstellungen hinzufügen.
Feishu (Lark)
Entwicklerkonsole: https://open.feishu.cn/app- Klicken Sie auf Create App → In-house app (自建应用). Unternehmens- oder Geschäftskonten sind erforderlich — Feishu OAuth ist nicht für persönliche Konten verfügbar.
- Unter Permissions & Scopes suchen Sie nach und aktivieren Sie:
contact:user.email:readonly
- Unter Security Settings → Redirect URL fügen Sie Ihre Callback-URL hinzu:
- Kopieren Sie die App ID und App Secret aus dem Abschnitt Credentials & Basic Info.
contact:user.email:readonly
Hinweis: Feishu verwendetApp ID/App Secretstatt der Standard-BenennungenClient ID/Client Secret. Die Umgebungsvariablennamen spiegeln dies wider:FEISHU_APP_IDundFEISHU_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.
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 einememail_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):- FIM One sucht nach einem vorhandenen Konto, dessen E-Mail mit der Feishu-Unternehmenskontakt-E-Mail übereinstimmt.
- Wenn eine Übereinstimmung gefunden wird, wird das Feishu-Konto automatisch an dieses vorhandene FIM-Konto gebunden und der Benutzer wird angemeldet.
- Wenn keine Übereinstimmung vorhanden ist (auch wenn die E-Mail leer ist), wird ein neues FIM-Konto erstellt, das durch die Feishu
open_ididentifiziert wird. Das Konto hat eine leere E-Mail, die der Benutzer später in den Einstellungen ausfüllen kann.
Umgebungsvariablen – Kurzreferenz
| Variable | Anbieter | Erforderlich | Beschreibung |
|---|---|---|---|
GITHUB_CLIENT_ID | GitHub | Beide | GitHub OAuth App Client-ID |
GITHUB_CLIENT_SECRET | GitHub | Beide | GitHub OAuth App Client-Secret |
GOOGLE_CLIENT_ID | Beide | Google OAuth 2.0 Client-ID | |
GOOGLE_CLIENT_SECRET | Beide | Google OAuth 2.0 Client-Secret | |
DISCORD_CLIENT_ID | Discord | Beide | Discord OAuth2 Anwendungs-Client-ID |
DISCORD_CLIENT_SECRET | Discord | Beide | Discord OAuth2 Anwendungs-Client-Secret |
FEISHU_APP_ID | Feishu | Beide | Feishu In-House App-ID (Hinweis: nicht CLIENT_ID) |
FEISHU_APP_SECRET | Feishu | Beide | Feishu In-House App-Secret |
FRONTEND_URL | Alle | Prod | Wohin der Browser nach Abschluss von OAuth umgeleitet wird (z. B. https://yourdomain.com) |
API_BASE_URL | Alle | Prod | Extern erreichbare Backend-URL, wird zum Erstellen von Callback-URLs verwendet |
NEXT_PUBLIC_API_URL | Alle | Prod | Browser-seitige API-URL für OAuth-Umleitungen – wird zur Build-Zeit eingebettet |
_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 vonFRONTEND_URL,API_BASE_URLundNEXT_PUBLIC_API_URL.