
Eine JWT-basierte API zur Verwaltung von Benutzern und Ausstellung von JWT-Tokens
# Auth - Authentifizierung und Benutzerverwaltung von Supabase
[](https://coveralls.io/github/supabase/auth?branch=master)
Auth ist ein in Go geschriebener Benutzerverwaltungs- und Authentifizierungsserver, der Funktionen von [Supabase](https://supabase.com) unterstützt, wie zum Beispiel:
- Ausstellung von JWTs
- Row Level Security mit PostgREST
- Benutzerverwaltung
- Anmeldung mit E-Mail, Passwort, Magic Link, Telefonnummer
- Anmeldung mit externen Anbietern (Google, Apple, Facebook, Discord, ...)
Es basiert ursprünglich auf der hervorragenden [GoTrue-Codebasis von Netlify](https://github.com/netlify/gotrue), jedoch haben sich beide in Bezug auf Funktionen und Fähigkeiten erheblich auseinanderentwickelt.
Wenn du zum Projekt beitragen möchtest, wirf bitte einen Blick auf den [Leitfaden für Mitwirkende](https://github.com/supabase/auth/blob/master/CONTRIBUTING.md).
## Inhaltsverzeichnis
- [Schnellstart](#quick-start)
- [Produktionsbetrieb](#running-in-production)
- [Konfiguration](#configuration)
- [Endpunkte](#endpoints)
## Schnellstart
Erstelle eine `.env`-Datei, um deine eigenen benutzerdefinierten Umgebungsvariablen zu speichern. Siehe [`example.env`](https://github.com/supabase/auth/blob/master/example.env)
1. Starte die lokale Postgres-Datenbank in einem Postgres-Container: `docker-compose -f docker-compose-dev.yml up postgres`
2. Erstelle die Auth-Binärdatei: `make build` . Du solltest eine Ausgabe wie diese sehen:```bash
go build -ldflags "-X github.com/supabase/auth/cmd.Version=`git rev-parse HEAD`"
GOOS=linux GOARCH=arm64 go build -ldflags "-X github.com/supabase/auth/cmd.Version=`git rev-parse HEAD`" -o gotrue-arm64
```
3. Führen Sie die Auth-Binärdatei aus: `./auth`
### Wenn Sie Docker installiert haben
Erstellen Sie eine `.env.docker`-Datei, um Ihre eigenen benutzerdefinierten Umgebungsvariablen zu speichern. Siehe [`example.docker.env`](https://github.com/supabase/auth/blob/master/example.docker.env)
1. `make build`
2. `make dev`
3. `docker ps` sollte zwei Docker-Container anzeigen (`auth-auth-1` und `auth-postgres-1`)
4. Das war's! Besuchen Sie den [Health-Check-Endpunkt](http://localhost:9999/health), um zu bestätigen, dass auth läuft.
## Produktionsbetrieb
Einen Authentifizierungsserver in der Produktion zu betreiben, ist keine leichte Aufgabe. Wir empfehlen die Verwendung von [Supabase Auth](https://supabase.com/auth), das regelmäßig Sicherheitsupdates erhält.
Andernfalls stellen Sie bitte sicher, dass Sie einen Prozess einrichten, um zeitnah auf die neueste Version zu aktualisieren. Sie können dies tun, indem Sie diesem Repository folgen, insbesondere den Abschnitten [Releases](https://github.com/supabase/auth/releases) und [Security Advisories](https://github.com/supabase/auth/security/advisories).
### Abwärtskompatibilität
Auth verwendet das [Semantic Versioning](https://semver.org)-Schema. Hier sind einige weitere Erläuterungen zu den Garantien der Abwärtskompatibilität:
**Go-API-Kompatibilität**
Auth ist nicht dafür gedacht, als Go-Bibliothek verwendet zu werden. Es gibt keine Garantien für die Abwärtskompatibilität der API, wenn es auf diese Weise verwendet wird, unabhängig davon, welche Versionsnummer sich ändert.
**Patch**
Änderungen an der Patch-Version garantieren Abwärtskompatibilität mit:
- Datenbankobjekten (Tabellen, Spalten, Indizes, Funktionen).
- REST-API
- JWT-Struktur
- Konfiguration
Garantierte Beispiele:
- Eine Spalte wird ihren Typ nicht ändern.
- Eine Tabelle wird ihren Primärschlüssel nicht ändern.
- Ein Index wird nicht entfernt.
- Eine Eindeutigkeitsbeschränkung wird nicht entfernt.
- Eine REST-API wird nicht entfernt.
- Parameter für REST-APIs funktionieren weiterhin äquivalent wie zuvor (oder besser, wenn ein Fehler behoben wurde).
- Die Konfiguration wird sich nicht ändern.
Nicht garantierte Beispiele:
- Eine Tabelle kann neue Spalten erhalten.
- Spalten in einer Tabelle können neu angeordnet werden.
- Nicht-eindeutige Constraints können entfernt werden (Datenbankprüfungen, NULL, Standardwerte).
- JWTs können neue Eigenschaften erhalten.
**Minor**
Änderungen an der Minor-Version garantieren Abwärtskompatibilität mit:
- REST-API
- JWT-Struktur
- Konfiguration
Ausnahmen von diesen Garantien werden nur dann gemacht, wenn schwerwiegende Sicherheitsprobleme gefunden werden, die auf keine andere Weise behoben werden können.
Garantierte Beispiele:
- Bestehende APIs können als veraltet markiert werden, funktionieren aber für die nächsten paar Minor-Versionen weiter.
- Konfigurationsänderungen können als veraltet markiert werden, funktionieren aber für die nächsten paar Minor-Versionen weiter.
- Bereits ausgestellte JWTs werden akzeptiert, aber neue JWTs können eine andere Struktur haben (in der Regel aber ähnlich).
Nicht garantierte Beispiele:
- Entfernung von JWT-Feldern nach einem Deprecation-Hinweis.
- Entfernung bestimmter APIs nach einem Deprecation-Hinweis.
- Entfernung der Anmeldung mit externen Anbietern nach einem Deprecation-Hinweis.
- Löschung, Kürzung, erhebliche Schemaänderungen an Tabellen, Indizes, Sichten, Funktionen.
Wir streben an, einen Deprecation-Hinweis in den Ausführungsprotokollen für mindestens zwei Major-Versionen oder zwei Wochen bereitzustellen, wenn mehrere Versionen veröffentlicht werden. Die Kompatibilität wird garantiert, solange der Hinweis aktiv ist.
**Major**
Änderungen an der Major-Version garantieren keine Abwärtskompatibilität mit früheren Versionen.
### Geerbte Funktionen
Bestimmte geerbte Funktionen aus der Netlify-Codebasis werden von Supabase nicht unterstützt und können in Zukunft ohne vorherige Ankündigung entfernt werden. Dies ist eine umfassende Liste dieser Funktionen:
1. Mandantenfähigkeit (Multi-Tenancy) über die Tabelle `instances`, d.h. den Konfigurationsparameter `GOTRUE_MULTI_INSTANCE_MODE`.
2. Systembenutzer (Zero-UUID-Benutzer).
3. Super-Admin über die Spalte `is_super_admin`.
4. Gruppeninformationen in JWTs über `GOTRUE_JWT_ADMIN_GROUP_NAME` und andere Konfigurationsfelder.
5. JWT-Signierung. Supabase Auth unterstützt asymmetrische Schlüssel (standardmäßig RS256; ECC/Ed25519 optional). HS256 wird weiterhin aus Kompatibilitätsgründen unterstützt, aber die Migration zu asymmetrischen Schlüsseln wird empfohlen, um Validierung und Rotation zu vereinfachen. Zukünftige Entfernungen (Deprecations) werden im Changelog angekündigt. Weitere Details finden Sie im [Leitfaden zu JWT-Signaturschlüsseln](https://supabase.com/docs/guides/auth/signing-keys) und im [JWTs-Leitfaden](https://supabase.com/docs/guides/auth/jwts).
Beachten Sie, dass dies keine vollständige Liste ist und sie sich ändern kann.
### Best Practices beim Selbsthosting
Hier sind einige Best Practices, die Sie beim Selbsthosting befolgen sollten, um die Abwärtskompatibilität mit Auth sicherzustellen:
1. Ändern Sie nicht das von Auth verwaltete Schema. Sie können alle Migrationen im Verzeichnis `migrations` einsehen.
2. Verlassen Sie sich nicht auf das Schema und die Datenstruktur in der Datenbank. Verwenden Sie immer Auth-APIs und JWTs, um Informationen über Benutzer abzuleiten.
3. Führen Sie Auth immer hinter einem TLS-fähigen Proxy aus, z. B. einem Load Balancer, CDN, nginx oder anderer ähnlicher Software.
## Konfiguration
Sie können Auth entweder über eine Konfigurationsdatei namens `.env`, über Umgebungsvariablen oder eine Kombination aus beidem konfigurieren. Umgebungsvariablen haben das Präfix `GOTRUE_` und haben immer Vorrang vor Werten, die über die Datei bereitgestellt werden.
### Top-Level```properties
GOTRUE_SITE_URL=https://example.netlify.com/
```
`SITE_URL` - `string` **erforderlich**
Die Basis-URL, unter der Ihre Website erreichbar ist. Wird derzeit in Kombination mit anderen Einstellungen verwendet, um URLs für E-Mails zu erstellen. Jede URI, die denselben Host wie `SITE_URL` verwendet, ist ein zulässiger Wert für `redirect_to`-Parameter (siehe `/authorize` usw.).
`URI_ALLOW_LIST` - `string`
Eine durch Kommas getrennte Liste von URIs (z. B. `"https://foo.example.com,https://*.foo.example.com,https://bar.example.com"`), die als gültige `redirect_to`-Ziele zugelassen sind. Standardmäßig []. Unterstützt Wildcard-Abgleich durch Globbing. Z. B. erlaubt `https://*.foo.example.com` `https://a.foo.example.com` und `https://b.foo.example.com`. Globbing wird auch für Subdomains unterstützt. Z. B. erlaubt `https://foo.example.com/*` `https://foo.example.com/page1` und `https://foo.example.com/page2`.
Weitere gängige Glob-Muster finden Sie unter dem [folgenden Link](https://pkg.go.dev/github.com/gobwas/glob#Compile).
`OPERATOR_TOKEN` - `string` _Nur im Multi-Instanz-Modus_
Das gemeinsame Geheimnis mit einem Operator (normalerweise Netlify) für diesen Microservice. Wird verwendet, um zu überprüfen, dass Anfragen über den Operator weitergeleitet wurden und
die Nutzlastwerte vertrauenswürdig sind.
`DISABLE_SIGNUP` - `bool`
Wenn die Registrierung deaktiviert ist, können neue Benutzer nur über Einladungen erstellt werden. Standardmäßig `false`, alle Registrierungen aktiviert.
`GOTRUE_EXTERNAL_EMAIL_ENABLED` - `bool`
Hiermit können Sie E-Mail-Registrierungen deaktivieren (Benutzer können weiterhin externe OAuth-Anbieter zur Registrierung / Anmeldung verwenden)
`GOTRUE_EXTERNAL_PHONE_ENABLED` - `bool`
Hiermit können Sie Telefon-Registrierungen deaktivieren (Benutzer können weiterhin externe OAuth-Anbieter zur Registrierung / Anmeldung verwenden)
`GOTRUE_RATE_LIMIT_HEADER` - `string`
Header, auf dessen Basis das Rate-Limiting für den `/token`-Endpunkt erfolgt. Dieser Header sollte von einem vertrauenswürdigen Upstream-Proxy (z. B. Kong oder Envoy) gesetzt werden. Header wie `x-forwarded-for` sind fälschbar und können für das Rate-Limiting nicht vertrauenswürdig sein, wenn sie direkt vom Client bereitgestellt werden.
`GOTRUE_RATE_LIMIT_EMAIL_SENT` - `string`
Begrenzen Sie die Anzahl der pro Stunde gesendeten E-Mails für die folgenden Endpunkte: `/signup`, `/invite`, `/magiclink`, `/recover`, `/otp` und `/user`.
`GOTRUE_PASSWORD_MIN_LENGTH` - `int`
Mindestlänge des Passworts, standardmäßig 6.
`GOTRUE_PASSWORD_REQUIRED_CHARACTERS` - ein String von Zeichensätzen, getrennt durch `:`. Ein Passwort muss mindestens ein Zeichen aus jedem Satz enthalten, um akzeptiert zu werden. Um das Zeichen `:` zu verwenden, maskieren Sie es mit `\`.
`GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED` - `bool`
Wenn die Rotation von Refresh-Tokens aktiviert ist, erkennt die Authentifizierung automatisch böswillige Versuche, ein widerrufenes Refresh-Token erneut zu verwenden. Wird ein böswilliger Versuch erkannt, widerruft GoTrue sofort alle Tokens, die von dem betreffenden Token abgeleitet wurden.
`GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL` - `string`
Diese Einstellung ist nur anwendbar, wenn `GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED` aktiviert ist. Das Wiederverwendungsintervall für ein Refresh-Token ermöglicht es, das Refresh-Token während des Intervalls mehrfach auszutauschen, um Nebenläufigkeits- oder Offline-Probleme zu unterstützen. Während des Wiederverwendungsintervalls betrachtet die Authentifizierung die Verwendung eines widerrufenen Tokens nicht als böswilligen Versuch und gibt einfach das untergeordnete Refresh-Token zurück.
Nur das zuvor widerrufene Token kann wiederverwendet werden. Die Verwendung eines alten Refresh-Tokens lange vor dem aktuell gültigen Refresh-Token löst die Wiederverwendungserkennung aus.
### API```properties
GOTRUE_API_HOST=localhost
PORT=9999
API_EXTERNAL_URL=http://localhost:9999
```
`API_HOST` - `string`
Hostname, auf dem gelauscht werden soll.
`PORT` (no prefix) / `API_PORT` - `number`
Portnummer, auf der gelauscht werden soll. Standardmäßig `8081`.
`API_ENDPOINT` - `string` _Nur Multi-Instanz-Modus_
Steuert, über welchen Endpoint Netlify auf diese API zugreifen kann.
`API_EXTERNAL_URL` - `string` **erforderlich**
Die URL, unter der GoTrue möglicherweise erreicht wird.
`REQUEST_ID_HEADER` - `string`
Falls Sie eine Request-ID von der eingehenden Anfrage übernehmen möchten, geben Sie den Namen in diesem Wert an.
### Datenbank```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
```
`DB_DRIVER` - `string` **erforderlich**
Wählt aus, welchen Datenbank-Dialekt du verwenden möchtest. Muss `postgres` sein.
`DATABASE_URL` (ohne Präfix) / `DB_DATABASE_URL` - `string` **erforderlich**
Verbindungszeichenfolge für die Datenbank.
`GOTRUE_DB_MAX_POOL_SIZE` - `int`
Legt die maximale Anzahl offener Verbindungen zur Datenbank fest. Der Standardwert ist 0, was einer „unbegrenzten" Anzahl von Verbindungen entspricht.
`DB_NAMESPACE` - `string`
Fügt allen Tabellennamen ein Präfix hinzu.
**Hinweis zu Migrationen**
Migrationen werden automatisch angewendet, wenn du `./auth` ausführst. Du hast jedoch auch die Möglichkeit, die Migrationen über die folgenden Methoden erneut auszuführen:
- Wenn lokal erstellt: `./auth migrate`
- Mit Docker: `docker run --rm auth gotrue migrate`
### Protokollierung```properties
LOG_LEVEL=debug # available without GOTRUE prefix (exception)
GOTRUE_LOG_FILE=/var/log/go/auth.log
```
`LOG_LEVEL` - `string`
Steuert, welche Loglevels ausgegeben werden. Wählen Sie zwischen `panic`, `fatal`, `error`, `warn`, `info` oder `debug`. Der Standardwert ist `info`.
`LOG_FILE` - `string`
Wenn Sie möchten, dass Logs in eine Datei geschrieben werden, setzen Sie `log_file` auf einen gültigen Dateipfad.
### Observability
Auth verfügt über eine grundlegende Observability-Unterstützung. Es kann
[OpenTelemetry](https://opentelemetry.io)-Metriken und -Traces an einen Collector exportieren.
#### Tracing
Konfigurieren Sie zum Aktivieren von Tracing diese Variablen:
`GOTRUE_TRACING_ENABLED` - `bool`
`GOTRUE_TRACING_EXPORTER` - `string` nur `opentelemetry` wird unterstützt
Stellen Sie außerdem sicher, dass Sie auch die [OpenTelemetry
Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/)-Konfiguration
für Ihren Collector oder Dienst konfigurieren.
Wenn Sie beispielsweise
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution)
verwenden, sollten Sie diese standardmäßigen OpenTelemetry-OTLP-Variablen festlegen:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
```
#### Metriken
Um Metriken zu aktivieren, konfigurieren Sie diese Variablen:
`GOTRUE_METRICS_ENABLED` - `boolean`
`GOTRUE_METRICS_EXPORTER` - `string`, nur `opentelemetry` und `prometheus`
werden unterstützt
Stellen Sie sicher, dass Sie auch die [OpenTelemetry
Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/)
Konfiguration für Ihren Collector oder Dienst einrichten.
Wenn Sie den `prometheus`-Exporter verwenden, können Server-Host und Port mit
diesen standardmäßigen OpenTelemetry-Variablen konfiguriert werden:
`OTEL_EXPORTER_PROMETHEUS_HOST` - IP-Adresse, Standard `0.0.0.0`
`OTEL_EXPORTER_PROMETHEUS_PORT` - Portnummer, Standard `9100`
Die Metriken werden auf dem `/`-Pfad auf dem Server exportiert.
Wenn Sie den `opentelemetry`-Exporter verwenden, werden die Metriken an den
Collector übertragen.
Wenn Sie beispielsweise
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution)
verwenden, sollten Sie diese standardmäßigen OpenTelemetry-OTLP-Variablen festlegen:```
OTEL_SERVICE_NAME=auth
OTEL_EXPORTER_OTLP_PROTOCOL=grpc
OTEL_EXPORTER_OTLP_ENDPOINT=https://api.honeycomb.io:443
OTEL_EXPORTER_OTLP_HEADERS="x-honeycomb-team=<API-KEY>,x-honeycomb-dataset=auth"
```
Beachten Sie, dass Honeycomb.io einen kostenpflichtigen Plan benötigt, um Metriken aufzunehmen.
Wenn Sie ein Problem mit nicht übertragenen Traces oder Metriken debuggen müssen, können Sie
`DEBUG=true` setzen, um weitere Einblicke vom OpenTelemetry-SDK zu erhalten.
#### Benutzerdefinierte Ressourcenattribute
Bei Verwendung des OpenTelemetry-Tracing- oder Metrik-Exporters können Sie benutzerdefinierte
Ressourcenattribute über die [standardmäßige Umgebungsvariable `OTEL_RESOURCE_ATTRIBUTES`](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable) definieren.
Ein Standardattribut `auth.version` wird bereitgestellt, das die Build-Version enthält.
#### Tracing von HTTP-Routen
Alle HTTP-Aufrufe an die Auth-API werden getracet. Die Routen verwenden die parametrisierte
Version der Route, und die Werte für die Routenparameter sind als Span-Attribut
`http.route.params.<route-key>` verfügbar.
Zum Beispiel die folgende Anfrage:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
```
wird verfolgt als:```
http.method = GET
http.route = /admin/users/{user_id}
http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
```
#### Go-Runtime- und HTTP-Metriken
Alle Go-Runtime-Metriken werden exponiert. Einige HTTP-Metriken werden ebenfalls erfasst
standardmäßig.
### JSON Web Tokens (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
```
`JWT_SECRET` - `string` **erforderlich**
Das Geheimnis, mit dem JWT-Tokens signiert werden.
`JWT_EXP` - `number`
Wie lange Tokens gültig sind, in Sekunden. Standard ist 3600 (1 Stunde).
`JWT_AUD` - `string`
Die standardmäßige JWT-Zielgruppe. Verwenden Sie Zielgruppen, um Benutzer zu gruppieren.
`JWT_ADMIN_GROUP_NAME` - `string`
Der Name der Admin-Gruppe (falls aktiviert). Standard ist `admin`.
`JWT_DEFAULT_GROUP_NAME` - `string`
Die Standardgruppe, der alle neuen Benutzer zugewiesen werden.
### Externe Authentifizierungsanbieter
Wir unterstützen `apple`, `azure`, `bitbucket`, `discord`, `facebook`, `figma`, `github`, `gitlab`, `google`, `keycloak`, `linkedin`, `notion`, `snapchat`, `spotify`, `slack`, `twitch`, `twitter` und `workos` für die externe Authentifizierung.
Verwenden Sie die Namen als Schlüssel unter `external`, um jeden einzelnen zu konfigurieren.```properties
GOTRUE_EXTERNAL_GITHUB_ENABLED=true
GOTRUE_EXTERNAL_GITHUB_CLIENT_ID=myappclientid
GOTRUE_EXTERNAL_GITHUB_SECRET=clientsecretvaluessssh
GOTRUE_EXTERNAL_GITHUB_REDIRECT_URI=http://localhost:3000/callback
```
Es sind keine externen Anbieter erforderlich, aber Sie müssen die erforderlichen Werte angeben, wenn Sie einen davon aktivieren möchten.
`EXTERNAL_X_ENABLED` - `bool`
Gibt an, ob dieser externe Anbieter aktiviert ist oder nicht
`EXTERNAL_X_CLIENT_ID` - `string` **erforderlich**
Die beim externen Anbieter registrierte OAuth2-Client-ID.
`EXTERNAL_X_SECRET` - `string` **erforderlich**
Das vom externen Anbieter bei der Registrierung bereitgestellte OAuth2-Client-Secret.
`EXTERNAL_X_REDIRECT_URI` - `string` **erforderlich**
Die URI, auf die ein OAuth2-Anbieter mit den Werten `code` und `state` umleitet.
`EXTERNAL_X_URL` - `string`
Die Basis-URL, die zum Erstellen der URLs für die Anforderung von Autorisierungs- und Zugriffstokens verwendet wird. Wird von `gitlab` und `keycloak` verwendet. Für `gitlab` lautet der Standardwert `https://gitlab.com`. Für `keycloak` müssen Sie dies auf Ihre Instanz setzen, zum Beispiel: `https://keycloak.example.com/realms/myrealm`
#### Netzwerk-Härtung
Die Konfiguration eines externen Authentifizierungsanbieters führt dazu, dass Auth ausgehende HTTP-Anfragen an die Autorisierungs-, Token- und Userinfo-Endpunkte dieses Anbieters sendet. Das Konfigurieren eines Anbieters entweder über `GOTRUE_EXTERNAL_*`-Einstellungen oder eine Admin-API ist eine administrative Aktion und impliziert Vertrauen in die Hosts und URLs, die kontaktiert werden.
Das Netzwerk, in dem Auth läuft, sollte so gehärtet sein, dass diese ausgehenden Verbindungen keine nur internen Ressourcen erreichen können, die Sie nicht offenlegen möchten, wie `localhost`-/Loopback-Adressen oder Cloud-Metadata-Endpunkte (z. B. `169.254.169.254`). Dies ist vor allem bei Anbietern mit administrativ konfigurierbaren oder ermittelbaren Endpunkten (z. B. benutzerdefinierten OAuth-/OIDC-Anbietern) wichtig, da eine falsch konfigurierte oder bösartige URL andernfalls zum Erreichen interner Infrastruktur verwendet werden könnte.
#### Apple-OAuth
Um die externe Authentifizierung mit Apple lokal auszuprobieren, müssen Sie Folgendes tun:
1. Ordnen Sie localhost auf \<my_custom_dns \> in Ihrer `/etc/hosts`-Konfiguration um.
2. Konfigurieren Sie auth so, dass HTTPS-Verkehr über localhost bereitgestellt wird, indem Sie `ListenAndServe` in [api.go](https://github.com/supabase/auth/blob/master/internal/api/api.go) durch Folgendes ersetzen: ```
func (a *API) ListenAndServe(hostAndPort string) {
log := logrus.WithField("component", "api")
path, err := os.Getwd()
if err != nil {
log.Println(err)
}
server := &http.Server{
Addr: hostAndPort,
Handler: a.handler,
}
done := make(chan struct{})
defer close(done)
go func() {
waitForTermination(log, done)
ctx, cancel := context.WithTimeout(context.Background(), time.Minute)
defer cancel()
server.Shutdown(ctx)
}()
if err := server.ListenAndServeTLS("PATH_TO_CRT_FILE", "PATH_TO_KEY_FILE"); err != http.ErrServerClosed {
log.WithError(err).Fatal("http server listen failed")
}
}
```
3. Generiere die crt- und key-Datei. Weitere Informationen findest du [hier](https://www.freecodecamp.org/news/how-to-get-https-working-on-your-local-development-environment-in-5-minutes-7af615770eec/).
4. Generiere das `GOTRUE_EXTERNAL_APPLE_SECRET`, indem du diesem [Beitrag](https://medium.com/identity-beyond-borders/how-to-configure-sign-in-with-apple-77c61e336003) folgst!
### E-Mail
Das Senden von E-Mails ist nicht erforderlich, wird aber für die Passwortwiederherstellung dringend empfohlen.
Wenn aktiviert, musst du die unten aufgeführten erforderlichen Werte angeben.```properties
GOTRUE_SMTP_HOST=smtp.mandrillapp.com
GOTRUE_SMTP_PORT=587
[email protected]
GOTRUE_SMTP_PASS=correcthorsebatterystaple
[email protected]
GOTRUE_MAILER_SUBJECTS_CONFIRMATION="Please confirm"
```
`SMTP_ADMIN_EMAIL` - `string` **erforderlich**
Die `From`-E-Mail-Adresse für alle gesendeten E-Mails.
`SMTP_HOST` - `string` **erforderlich**
Der Hostname des Mailservers, über den E-Mails gesendet werden.
`SMTP_PORT` - `number` **erforderlich**
Die Portnummer, über die eine Verbindung zum Mailserver hergestellt wird.
`SMTP_USER` - `string`
Falls der Mailserver eine Authentifizierung erfordert, der zu verwendende Benutzername.
`SMTP_PASS` - `string`
Falls der Mailserver eine Authentifizierung erfordert, das zu verwendende Passwort.
`SMTP_MAX_FREQUENCY` - `number`
Steuert die Mindestzeit, die vergehen muss, bevor eine weitere Bestätigungs-E-Mail für die Registrierung oder eine E-Mail zum Zurücksetzen des Passworts gesendet wird. Der Wert ist die Anzahl der Sekunden. Standardmäßig 900 (15 Minuten).
`SMTP_SENDER_NAME` - `string`
Legt den Namen des Absenders fest. Standardmäßig wird `SMTP_ADMIN_EMAIL` verwendet, falls nicht angegeben.
`MAILER_AUTOCONFIRM` - `bool`
Wenn Sie keine E-Mail-Bestätigung benötigen, können Sie dies auf `true` setzen. Standardmäßig `false`.
`MAILER_OTP_EXP` - `number`
Steuert die Gültigkeitsdauer eines E-Mail-Links oder OTPs.
`MAILER_URLPATHS_INVITE` - `string`
URL-Pfad, der in der Einladungs-E-Mail verwendet wird. Standardmäßig `/verify`.
`MAILER_URLPATHS_CONFIRMATION` - `string`
URL-Pfad, der in der Bestätigungs-E-Mail für die Registrierung verwendet wird. Standardmäßig `/verify`.
`MAILER_URLPATHS_RECOVERY` - `string`
URL-Pfad, der in der E-Mail zum Zurücksetzen des Passworts verwendet wird. Standardmäßig `/verify`.
`MAILER_URLPATHS_EMAIL_CHANGE` - `string`
URL-Pfad, der in der Bestätigungs-E-Mail für die E-Mail-Änderung verwendet wird. Standardmäßig `/verify`.
`MAILER_SUBJECTS_INVITE` - `string`
E-Mail-Betreff für die Benutzereinladung. Standardmäßig `You've been invited`.
`MAILER_SUBJECTS_CONFIRMATION` - `string`
E-Mail-Betreff für die Bestätigung der Registrierung. Standardmäßig `Confirm your email address`.
`MAILER_SUBJECTS_RECOVERY` - `string`
E-Mail-Betreff für das Zurücksetzen des Passworts. Standardmäßig `Reset your password`.
`MAILER_SUBJECTS_MAGIC_LINK` - `string`
E-Mail-Betreff für die Magic-Link-E-Mail. Standardmäßig `Your sign-in link`.
`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`
E-Mail-Betreff für die Bestätigung der E-Mail-Änderung. Standardmäßig `Confirm your new email address`.
`MAILER_SUBJECTS_REAUTHENTICATION` - `string`
E-Mail-Betreff für die erneute Authentifizierung. Standardmäßig `{{ .Token }} is your verification code`.
`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über ein geändertes Passwort. Standardmäßig `Your password was changed`.
`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine geänderte E-Mail-Adresse. Standardmäßig `Your email address was changed`.
`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine geänderte Telefonnummer. Standardmäßig `Your phone number was changed`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine verknüpfte Identität. Standardmäßig `A new sign-in method was linked to your account`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine entfernte Identität. Standardmäßig `A sign-in method was removed from your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine hinzugefügte Verifizierungsmethode. Standardmäßig `A new verification method was added to your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`
E-Mail-Betreff für die Benachrichtigung über eine entfernte Verifizierungsmethode. Standardmäßig `A verification method was removed from your account`.
`MAILER_TEMPLATES_INVITE` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim Einladen eines Benutzers verwendet wird. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `SiteURL`, `Email` und `ConfirmationURL` sind verfügbar.
Standardinhalt (falls Vorlage nicht verfügbar):```html
<h2>You've been invited</h2>
<p>You've been invited to create an account. Follow the link below to accept.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Accept invitation</a></p>
```
`MAILER_TEMPLATES_CONFIRMATION` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim Bestätigen einer Anmeldung verwendet wird. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `SiteURL`, `Email` und `ConfirmationURL` sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Confirm your email address</h2>
<p>Follow the link below to confirm this email address and finish signing up.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Confirm email address</a></p>
```
`MAILER_TEMPLATES_RECOVERY` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim Zurücksetzen eines Passworts verwendet werden soll. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `SiteURL`, `Email` und `ConfirmationURL` sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Reset your password</h2>
<p>We received a request to reset your password. Follow the link below to choose a new one.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Reset password</a></p>
<p>If you didn't request this, you can safely ignore this email.</p>
```
`MAILER_TEMPLATES_MAGIC_LINK` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim Senden des Magic Links verwendet werden soll. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `SiteURL`, `Email` und `ConfirmationURL` sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Your sign-in link</h2>
<p>Follow the link below to sign in. This link expires shortly and can only be used once.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Sign in</a></p>
```
`MAILER_TEMPLATES_EMAIL_CHANGE` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim Bestätigen der Änderung einer E-Mail-Adresse verwendet werden soll. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `SiteURL`, `Email`, `NewEmail` und `ConfirmationURL` sind verfügbar.
Standardinhalt (falls keine Vorlage verfügbar ist):```html
<h2>Confirm your new email address</h2>
<p>Follow the link below to confirm {{ .NewEmail }} as your new email address.</p>
<p><a href="https://github.com/supabase/auth/blob/master/%7B%7B%20.ConfirmationURL%20%7D%7D">Confirm new email address</a></p>
<p>If you didn't request this change, you can safely ignore this email.</p>
```
`MAILER_TEMPLATES_REAUTHENTICATION` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die beim erneuten Authentifizieren eines Benutzers verwendet werden soll. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variable `Token` ist verfügbar.
Standardinhalt (falls Vorlage nicht verfügbar):```html
<h2>Your verification code</h2>
<p>Use the code below to verify your identity. It expires shortly.</p>
<p>{{ .Token }}</p>
```
`MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die verwendet wird, wenn ein Benutzer darüber benachrichtigt wird, dass sein Passwort geändert wurde. (z. B. `https://www.example.com/path-to-email-template.html`)
`Email`-Variablen sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Your password was changed</h2>
<p>The password for your account was recently changed.</p>
<p>If you didn't make this change, reset your password and contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_PASSWORD_CHANGED_ENABLED` - `bool`
Ob eine Benachrichtigungs-E-Mail gesendet werden soll, wenn das Passwort eines Benutzers geändert wird. Standardmäßig `false`.
`MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die verwendet wird, wenn ein Benutzer benachrichtigt wird, dass seine E-Mail-Adresse geändert wurde. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `Email` und `OldEmail` sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Your email address was changed</h2>
<p>The email address for your account was changed from {{ .OldEmail }} to {{ .Email }}.</p>
<p>If you didn't make this change, contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_EMAIL_CHANGED_ENABLED` - `bool`
Gibt an, ob eine Benachrichtigungs-E-Mail gesendet werden soll, wenn die E-Mail-Adresse eines Benutzers geändert wird. Standardmäßig `false`.
`GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION` - `string`
URL-Pfad zu einer E-Mail-Vorlage, die verwendet wird, wenn ein Benutzer darüber benachrichtigt wird, dass seine Telefonnummer geändert wurde. (z. B. `https://www.example.com/path-to-email-template.html`)
Die Variablen `Email`, `Phone` und `OldPhone` sind verfügbar.
Standardinhalt (falls die Vorlage nicht verfügbar ist):```html
<h2>Your phone number was changed</h2>
<p>The phone number for your account was changed from {{ .OldPhone }} to {{ .Phone }}.</p>
<p>If you didn't make this change, contact support immediately.</p>
```
`GOTRUE_MAILER_NOTIFICATIONS_PHONE_CHANGED_ENABLED` - `bool`
Legt fest, ob eine Benachrichtigungs-E-Mail gesendet wird, wenn sich die Telefonnummer eines Benutzers ändert. Standardwert ist `false`.
`GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION` - `string`
---
[Read more](https://github.com/supabase/auth)