
Un'API basata su JWT per la gestione degli utenti e l'emissione di token JWT
Auth è un server di gestione utenti e autenticazione scritto in Go che alimenta le funzionalità di Supabase, come:
È originariamente basato sull'eccellente codebase GoTrue di Netlify, tuttavia entrambi si sono discostati in modo significativo per caratteristiche e funzionalità.
Se desideri contribuire al progetto, fa riferimento alla guida al contributo.
Crea un file .env per memorizzare le tue variabili d'ambiente personalizzate. Vedi example.env
docker-compose -f docker-compose-dev.yml up postgresmake build . Dovresti vedere un output simile a questo:```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-arm643. Esegui il binario auth: `./auth`
### Se hai Docker installato
Crea un file `.env.docker` per memorizzare le tue variabili d'ambiente personalizzate. Vedi [`example.docker.env`](https://github.com/supabase/auth/blob/HEAD/example.docker.env)
1. `make build`
2. `make dev`
3. `docker ps` dovrebbe mostrare due container Docker (`auth-auth-1` e `auth-postgres-1`)
4. Tutto qui! Visita l'[endpoint di health check](http://localhost:9999/health) per confermare che auth sia in esecuzione.
## Esecuzione in produzione
Eseguire un server di autenticazione in produzione non è un'impresa facile. Ti
consigliamo di utilizzare [Supabase Auth](https://supabase.com/auth), che riceve regolari
aggiornamenti di sicurezza.
In caso contrario, assicurati di predisporre un processo per aggiornare tempestivamente all'
ultima versione. Puoi farlo seguendo questo repository, in particolare le
sezioni [Releases](https://github.com/supabase/auth/releases) e [Security
Advisories](https://github.com/supabase/auth/security/advisories).
### Retrocompatibilità
Auth utilizza lo schema [Semantic Versioning](https://semver.org). Ecco alcuni
ulteriori chiarimenti sulle garanzie di retrocompatibilità:
**Compatibilità API Go**
Auth non è pensato per essere usato come libreria Go. Non ci sono garanzie sulla
retrocompatibilità API quando usato in questo modo, a prescindere da quale
numero di versione cambi.
**Patch**
Le modifiche alla versione patch garantiscono la retrocompatibilità con:
- Oggetti del database (tabelle, colonne, indici, funzioni).
- API REST
- Struttura JWT
- Configurazione
Esempi garantiti:
- Una colonna non cambierà il suo tipo.
- Una tabella non cambierà la sua chiave primaria.
- Un indice non verrà rimosso.
- Un vincolo di unicità non verrà rimosso.
- Un'API REST non verrà rimossa.
- I parametri delle API REST funzioneranno in modo equivalente a prima (o meglio, se un bug
è stato corretto).
- La configurazione non cambierà.
Esempi non garantiti:
- Una tabella potrebbe aggiungere nuove colonne.
- Le colonne in una tabella potrebbero essere riordinate.
- I vincoli non univoci potrebbero essere rimossi (controlli a livello di database, null, valori
predefiniti).
- JWT potrebbe aggiungere nuove proprietà.
**Minor**
Le modifiche alla versione minor garantiscono la retrocompatibilità con:
- API REST
- Struttura JWT
- Configurazione
Eccezioni a queste garanzie saranno ammesse solo quando verranno trovati seri problemi
di sicurezza che non possono essere risolti in nessun altro modo.
Esempi garantiti:
- Le API esistenti potrebbero essere deprecate ma continueranno a funzionare per le prossime poche
versioni minor.
- Le modifiche alla configurazione potrebbero diventare deprecate ma continueranno a funzionare per
le prossime poche versioni minor.
- I JWT già emessi saranno accettati, ma i nuovi JWT potrebbero avere una
struttura diversa (ma di solito simile).
Esempi non garantiti:
- Rimozione dei campi JWT dopo un avviso di deprecazione.
- Rimozione di alcune API dopo un avviso di deprecazione.
- Rimozione dell'accesso con provider esterni dopo un avviso di deprecazione.
- Eliminazione, troncamento, modifiche significative dello schema di tabelle, indici, viste,
funzioni.
Puntiamo a fornire un avviso di deprecazione nei log di esecuzione per almeno due
versioni major o due settimane se vengono pubblicate più release. La compatibilità sarà
garantita finché l'avviso è attivo.
**Major**
Le modifiche alla versione major non garantiscono alcuna retrocompatibilità con
le versioni precedenti.
### Funzionalità ereditate
Alcune funzionalità ereditate dal codebase di Netlify non sono supportate da
Supabase e potrebbero essere rimosse senza preavviso in futuro. Questa è una
lista completa di tali funzionalità:
1. Multi-tenancy tramite la tabella `instances`, cioè il parametro di configurazione
`GOTRUE_MULTI_INSTANCE_MODE`.
2. Utente di sistema (utente UUID zero).
3. Super admin tramite la colonna `is_super_admin`.
4. Informazioni di gruppo nei JWT tramite `GOTRUE_JWT_ADMIN_GROUP_NAME` e altri
campi di configurazione.
5. Firma JWT. Supabase Auth supporta chiavi asimmetriche (RS256 di default;
ECC/Ed25519 opzionali). HS256 è ancora supportato per compatibilità, ma
migrare verso chiavi asimmetriche è consigliato per una validazione e una
rotazione più semplici. Le future deprecazioni saranno annunciate nel changelog. Vedi la
[guida JWT Signing Keys](https://supabase.com/docs/guides/auth/signing-keys) e
[la guida JWTs](https://supabase.com/docs/guides/auth/jwts) per i dettagli.
Nota che questa non è una lista esaustiva e potrebbe cambiare.
### Buone pratiche per il self-hosting
Queste sono alcune buone pratiche da seguire quando si fa self-hosting per garantire la
retrocompatibilità con Auth:
1. Non modificare lo schema gestito da Auth. Puoi vedere tutte le
migrazioni nella directory `migrations`.
2. Non fare affidamento sullo schema e sulla struttura dei dati nel database. Usa sempre
le API di Auth e i JWT per dedurre informazioni sugli utenti.
3. Esegui sempre Auth dietro un proxy in grado di gestire TLS, come un load balancer, CDN,
nginx o altro software simile.
## Configurazione
Puoi configurare Auth usando un file di configurazione chiamato `.env`,
variabili d'ambiente, o una combinazione di entrambi. Le variabili d'ambiente hanno il prefisso `GOTRUE_` e avranno sempre precedenza sui valori forniti tramite file.
### Livello principale```properties
GOTRUE_SITE_URL=https://example.netlify.com/
SITE_URL - string obbligatorio
L'URL di base in cui si trova il tuo sito. Attualmente utilizzato in combinazione con altre impostazioni per costruire gli URL usati nelle email. Qualsiasi URI che condivide un host con SITE_URL è un valore consentito per i parametri redirect_to (vedi /authorize ecc.).
URI_ALLOW_LIST - string
Un elenco separato da virgole di URI (ad es. "https://foo.example.com,https://*.foo.example.com,https://bar.example.com") che sono consentiti come destinazioni redirect_to valide. Il valore predefinito è []. Supporta il matching con caratteri jolly tramite globbing. Ad es. https://*.foo.example.com consentirà l'accettazione di https://a.foo.example.com e https://b.foo.example.com. Il globbing è supportato anche sui sottodomini. Ad es. https://foo.example.com/* consentirà l'accettazione di https://foo.example.com/page1 e https://foo.example.com/page2.
Per pattern glob più comuni, consulta il seguente link.
OPERATOR_TOKEN - string Solo modalità multi-istanza
Il segreto condiviso con un operatore (di solito Netlify) per questo microservizio. Utilizzato per verificare che le richieste siano state inoltrate tramite l'operatore e che i valori del payload possano essere considerati attendibili.
DISABLE_SIGNUP - bool
Quando la registrazione è disabilitata, l'unico modo per creare nuovi utenti è tramite inviti. Il valore predefinito è false, tutte le registrazioni abilitate.
GOTRUE_EXTERNAL_EMAIL_ENABLED - bool
Utilizza questa impostazione per disabilitare le registrazioni via email (gli utenti possono comunque utilizzare provider OAuth esterni per registrarsi / accedere)
GOTRUE_EXTERNAL_PHONE_ENABLED - bool
Utilizza questa impostazione per disabilitare le registrazioni via telefono (gli utenti possono comunque utilizzare provider OAuth esterni per registrarsi / accedere)
GOTRUE_RATE_LIMIT_HEADER - string
Header su cui applicare il rate limiting all'endpoint /token. Questo header deve essere impostato da un proxy upstream attendibile (come Kong o Envoy). Header come x-forwarded-for sono falsificabili e non possono essere considerati attendibili per il rate limiting quando forniti direttamente dal client.
GOTRUE_RATE_LIMIT_EMAIL_SENT - string
Limita il numero di email inviate all'ora sui seguenti endpoint: /signup, /invite, /magiclink, /recover, /otp e /user.
GOTRUE_PASSWORD_MIN_LENGTH - int
Lunghezza minima della password, il valore predefinito è 6.
GOTRUE_PASSWORD_REQUIRED_CHARACTERS - una stringa di set di caratteri separati da :. Una password deve contenere almeno un carattere di ciascun set per essere accettata. Per usare il carattere : è necessario precederlo con \.
GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED - bool
Se la rotazione del refresh token è abilitata, l'autenticazione rileverà automaticamente i tentativi dannosi di riutilizzare un refresh token revocato. Quando viene rilevato un tentativo dannoso, GoTrue revoca immediatamente tutti i token derivati dal token incriminato.
GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL - string
Questa impostazione è applicabile solo se GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED è abilitata. L'intervallo di riutilizzo per un refresh token consente di scambiare il refresh token più volte durante l'intervallo per supportare problemi di concorrenza o offline. Durante l'intervallo di riutilizzo, l'autenticazione non considererà l'uso di un token revocato come un tentativo dannoso e restituirà semplicemente il refresh token figlio.
Solo il precedente token revocato può essere riutilizzato. L'utilizzo di un vecchio refresh token molto prima dell'attuale refresh token valido attiverà il rilevamento del riutilizzo.
GOTRUE_API_HOST=localhost PORT=9999 API_EXTERNAL_URL=http://localhost:9999
`API_HOST` - `string`
Nome host su cui mettersi in ascolto.
`PORT` (senza prefisso) / `API_PORT` - `number`
Numero di porta su cui mettersi in ascolto. Il valore predefinito è `8081`.
`API_ENDPOINT` - `string` _Solo modalità multi-istanza_
Controlla su quale endpoint Netlify può accedere a questa API.
`API_EXTERNAL_URL` - `string` **obbligatorio**
L'URL su cui GoTrue potrebbe essere accessibile.
`REQUEST_ID_HEADER` - `string`
Se desideri ereditare un ID di richiesta dalla richiesta in arrivo, specifica il nome in questo valore.
### Database```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
DB_DRIVER - string required
Sceglie il dialetto del database che desideri. Deve essere postgres.
DATABASE_URL (nessun prefisso) / DB_DATABASE_URL - string required
Stringa di connessione per il database.
GOTRUE_DB_MAX_POOL_SIZE - int
Imposta il numero massimo di connessioni aperte al database. Il valore predefinito è 0, che equivale a un numero di connessioni "illimitato".
DB_NAMESPACE - string
Aggiunge un prefisso a tutti i nomi delle tabelle.
Nota sulle migrazioni
Le migrazioni vengono applicate automaticamente quando esegui ./auth. Tuttavia, hai anche la possibilità di rieseguire le migrazioni tramite i seguenti metodi:
./auth migratedocker run --rm auth gotrue migrateLOG_LEVEL=debug # available without GOTRUE prefix (exception) GOTRUE_LOG_FILE=/var/log/go/auth.log
`LOG_LEVEL` - `string`
Controlla quali livelli di log vengono emessi. Scegli tra `panic`, `fatal`, `error`, `warn`, `info` o `debug`. Il valore predefinito è `info`.
`LOG_FILE` - `string`
Se desideri che i log vengano scritti su un file, imposta `log_file` su un percorso file valido.
### Observability
Auth ha funzionalità di osservabilità di base integrate. È in grado di esportare
[OpenTelemetry](https://opentelemetry.io) metriche e trace verso un collector.
#### Tracing
Per abilitare il tracing, configura queste variabili:
`GOTRUE_TRACING_ENABLED` - `bool`
`GOTRUE_TRACING_EXPORTER` - `string` solo `opentelemetry` supportato
Assicurati di configurare anche la configurazione dell'[OpenTelemetry
Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/)
per il tuo collector o servizio.
Ad esempio, se usi
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution)
dovresti impostare queste variabili standard OTLP di OpenTelemetry:```
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"
Per abilitare le metriche configura queste variabili:
GOTRUE_METRICS_ENABLED - boolean
GOTRUE_METRICS_EXPORTER - string supporta solo opentelemetry e prometheus
Assicurati di configurare anche il OpenTelemetry Exporter per il tuo collector o servizio.
Se usi l'exporter prometheus, l'host e la porta del server possono essere
configurati usando queste variabili standard OpenTelemetry:
OTEL_EXPORTER_PROMETHEUS_HOST - indirizzo IP, default 0.0.0.0
OTEL_EXPORTER_PROMETHEUS_PORT - numero di porta, default 9100
Le metriche vengono esportate sul percorso / del server.
Se usi l'exporter opentelemetry, le metriche vengono inviate al
collector.
Ad esempio, se usi Honeycomb.io dovresti impostare queste variabili standard OTLP di OpenTelemetry:``` 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=,x-honeycomb-dataset=auth"
Nota che Honeycomb.io richiede un piano a pagamento per ingerire le metriche.
Se devi eseguire il debug di un problema con trace o metriche non inviate, puoi
impostare `DEBUG=true` per ottenere maggiori dettagli dall'OpenTelemetry SDK.
#### Attributi personalizzati delle risorse
Quando utilizzi gli exporter di tracing o metriche OpenTelemetry puoi definire
attributi personalizzati delle risorse usando la [variabile d'ambiente standard
`OTEL_RESOURCE_ATTRIBUTES`](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable).
Un attributo predefinito `auth.version` è fornito e contiene la versione di build.
#### Tracciamento delle route HTTP
Tutte le chiamate HTTP all'Auth API vengono tracciate. Le route utilizzano la versione parametrizzata
della route, e i valori dei parametri della route possono essere trovati come
attributo span `http.route.params.<route-key>`.
Ad esempio, la seguente richiesta:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
sarà tracciato come:``` http.method = GET http.route = /admin/users/{user_id} http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
#### Metriche del runtime Go e HTTP
Tutte le metriche del runtime Go sono esposte. Alcune metriche HTTP vengono anche raccolte
per impostazione predefinita.
### JSON Web Tokens (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
JWT_SECRET - string obbligatorio
Il segreto usato per firmare i token JWT.
JWT_EXP - number
Per quanto tempo i token sono validi, in secondi. Il valore predefinito è 3600 (1 ora).
JWT_AUD - string
Il pubblico (audience) JWT predefinito. Usa gli audience per raggruppare gli utenti.
JWT_ADMIN_GROUP_NAME - string
Il nome del gruppo admin (se abilitato). Il valore predefinito è admin.
JWT_DEFAULT_GROUP_NAME - string
Il gruppo predefinito a cui assegnare tutti i nuovi utenti.
Supportiamo apple, azure, bitbucket, discord, facebook, figma, github, gitlab, google, keycloak, linkedin, notion, snapchat, spotify, slack, twitch, e per l'autenticazione esterna.
Usa i nomi come chiavi sotto external per configurare ciascuno separatamente.```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
Non è richiesto alcun provider esterno, ma è necessario fornire i valori richiesti se si sceglie di abilitarne uno.
`EXTERNAL_X_ENABLED` - `bool`
Indica se questo provider esterno è abilitato o meno
`EXTERNAL_X_CLIENT_ID` - `string` **required**
L'ID client OAuth2 registrato presso il provider esterno.
`EXTERNAL_X_SECRET` - `string` **required**
Il segreto client OAuth2 fornito dal provider esterno al momento della registrazione.
`EXTERNAL_X_REDIRECT_URI` - `string` **required**
L'URI a cui un provider OAuth2 reindirizzerà con i valori `code` e `state`.
`EXTERNAL_X_URL` - `string`
L'URL di base utilizzato per costruire gli URL con cui richiedere i token di autorizzazione e di accesso. Usato da `gitlab` e `keycloak`. Per `gitlab` il valore predefinito è `https://gitlab.com`. Per `keycloak` devi impostarlo sulla tua istanza, ad esempio: `https://keycloak.example.com/realms/myrealm`
#### Network hardening
La configurazione di un provider di autenticazione esterno fa sì che Auth effettui richieste HTTP in uscita verso gli endpoint di autorizzazione, token e userinfo del provider. Configurare un provider tramite le impostazioni `GOTRUE_EXTERNAL_*` o un'API di amministrazione è un'azione amministrativa e implica la fiducia negli host e negli URL che verranno contattati.
La rete in cui gira Auth dovrebbe essere protetta affinché queste connessioni in uscita non possano raggiungere risorse solo interne che non vuoi esporre, come indirizzi `localhost`/loopback o endpoint di metadati cloud (ad es. `169.254.169.254`). Questo è particolarmente rilevante per i provider con endpoint configurabili dall'amministratore o rilevabili (ad es. provider OAuth/OIDC personalizzati), dove un URL configurato male o dannoso potrebbe altrimenti essere usato per raggiungere infrastrutture interne.
#### Apple OAuth
Per provare l'autenticazione esterna con Apple in locale, dovrai fare quanto segue:
1. Rimappa localhost su \<my_custom_dns \> nella configurazione di `/etc/hosts`.
2. Configura auth per servire traffico HTTPS su localhost sostituendo `ListenAndServe` in [api.go](https://github.com/supabase/auth/blob/HEAD/internal/api/api.go) con: ```
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")
}
}
GOTRUE_EXTERNAL_APPLE_SECRET seguendo questo post!L'invio di email non è richiesto, ma è fortemente consigliato per il recupero della password. Se abilitato, devi fornire i valori richiesti di seguito.```properties GOTRUE_SMTP_HOST=smtp.mandrillapp.com GOTRUE_SMTP_PORT=587 GOTRUE_SMTP_USER=[email protected] GOTRUE_SMTP_PASS=correcthorsebatterystaple GOTRUE_SMTP_ADMIN_EMAIL=[email protected] GOTRUE_MAILER_SUBJECTS_CONFIRMATION="Please confirm"
`SMTP_ADMIN_EMAIL` - `string` **obbligatorio**
L'indirizzo email `From` per tutte le email inviate.
`SMTP_HOST` - `string` **obbligatorio**
Il nome host del server di posta attraverso cui inviare le email.
`SMTP_PORT` - `number` **obbligatorio**
Il numero di porta su cui connettersi al server di posta.
`SMTP_USER` - `string`
Se il server di posta richiede l'autenticazione, il nome utente da usare.
`SMTP_PASS` - `string`
Se il server di posta richiede l'autenticazione, la password da usare.
`SMTP_MAX_FREQUENCY` - `number`
Controlla il tempo minimo che deve trascorrere prima di inviare un'altra email di conferma della registrazione o di reset della password. Il valore è espresso in secondi. Il valore predefinito è 900 (15 minuti).
`SMTP_SENDER_NAME` - `string`
Imposta il nome del mittente. Se non utilizzato, il valore predefinito è `SMTP_ADMIN_EMAIL`.
`MAILER_AUTOCONFIRM` - `bool`
Se non richiedi la conferma via email, puoi impostarlo su `true`. Il valore predefinito è `false`.
`MAILER_OTP_EXP` - `number`
Controlla la durata di validità di un link email o di un OTP.
`MAILER_URLPATHS_INVITE` - `string`
Percorso URL da usare nell'email di invito utente. Il valore predefinito è `/verify`.
`MAILER_URLPATHS_CONFIRMATION` - `string`
Percorso URL da usare nell'email di conferma della registrazione. Il valore predefinito è `/verify`.
`MAILER_URLPATHS_RECOVERY` - `string`
Percorso URL da usare nell'email di reset della password. Il valore predefinito è `/verify`.
`MAILER_URLPATHS_EMAIL_CHANGE` - `string`
Percorso URL da usare nell'email di conferma del cambio di email. Il valore predefinito è `/verify`.
`MAILER_SUBJECTS_INVITE` - `string`
Oggetto dell'email da usare per l'invito utente. Il valore predefinito è `You've been invited`.
`MAILER_SUBJECTS_CONFIRMATION` - `string`
Oggetto dell'email da usare per la conferma della registrazione. Il valore predefinito è `Confirm your email address`.
`MAILER_SUBJECTS_RECOVERY` - `string`
Oggetto dell'email da usare per il reset della password. Il valore predefinito è `Reset your password`.
`MAILER_SUBJECTS_MAGIC_LINK` - `string`
Oggetto dell'email da usare per l'email con magic link. Il valore predefinito è `Your sign-in link`.
`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`
Oggetto dell'email da usare per la conferma del cambio di email. Il valore predefinito è `Confirm your new email address`.
`MAILER_SUBJECTS_REAUTHENTICATION` - `string`
Oggetto dell'email da usare per la riautenticazione. Il valore predefinito è `{{ .Token }} is your verification code`.
`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di modifica della password. Il valore predefinito è `Your password was changed`.
`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di modifica dell'indirizzo email. Il valore predefinito è `Your email address was changed`.
`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di modifica del numero di telefono. Il valore predefinito è `Your phone number was changed`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di collegamento dell'identità. Il valore predefinito è `A new sign-in method was linked to your account`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di scollegamento dell'identità. Il valore predefinito è `A sign-in method was removed from your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di aggiunta di un metodo di verifica. Il valore predefinito è `A new verification method was added to your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`
Oggetto dell'email da usare per la notifica di rimozione di un metodo di verifica. Il valore predefinito è `A verification method was removed from your account`.
`MAILER_TEMPLATES_INVITE` - `string`
Percorso URL di un modello email da usare quando si invita un utente. (ad es. `https://www.example.com/path-to-email-template.html`)
Sono disponibili le variabili `SiteURL`, `Email` e `ConfirmationURL`.
Contenuto predefinito (se il modello non è disponibile):```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="{{ .ConfirmationURL }}">Accept invitation</a></p>
MAILER_TEMPLATES_CONFIRMATION - string
Percorso URL di un modello di email da utilizzare per confermare una registrazione. (es. https://www.example.com/path-to-email-template.html)
Le variabili SiteURL, Email e ConfirmationURL sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
Follow the link below to confirm this email address and finish signing up.
``` `MAILER_TEMPLATES_RECOVERY` - `string`Percorso URL di un modello di email da utilizzare per reimpostare una password. (es. https://www.example.com/path-to-email-template.html)
Le variabili SiteURL, Email e ConfirmationURL sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
We received a request to reset your password. Follow the link below to choose a new one.
If you didn't request this, you can safely ignore this email.
``` `MAILER_TEMPLATES_MAGIC_LINK` - `string`Percorso URL di un template email da utilizzare per l'invio del magic link. (ad es. https://www.example.com/path-to-email-template.html)
Le variabili SiteURL, Email e ConfirmationURL sono disponibili.
Contenuto predefinito (se il template non è disponibile):```html
Follow the link below to sign in. This link expires shortly and can only be used once.
``` `MAILER_TEMPLATES_EMAIL_CHANGE` - `string`Percorso URL di un modello di email da utilizzare per confermare la modifica di un indirizzo email. (ad es. https://www.example.com/path-to-email-template.html)
Sono disponibili le variabili SiteURL, Email, NewEmail e ConfirmationURL.
Contenuto predefinito (se il modello non è disponibile):```html
Follow the link below to confirm {{ .NewEmail }} as your new email address.
If you didn't request this change, you can safely ignore this email.
``` `MAILER_TEMPLATES_REAUTHENTICATION` - `string`Percorso URL di un modello di email da utilizzare quando si riautentica un utente. (ad es. https://www.example.com/path-to-email-template.html)
La variabile Token è disponibile.
Contenuto predefinito (se il modello non è disponibile):```html
Use the code below to verify your identity. It expires shortly.
{{ .Token }}
``` `MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`Percorso URL di un modello di email da utilizzare quando si notifica a un utente che la sua password è stata modificata. (es. https://www.example.com/path-to-email-template.html)
Le variabili Email sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
The password for your account was recently changed.
If you didn't make this change, reset your password and contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PASSWORD_CHANGED_ENABLED` - `bool`Indica se inviare un'email di notifica quando la password di un utente viene modificata. Il valore predefinito è false.
MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION - string
Percorso URL di un modello di email da utilizzare quando si notifica a un utente che la sua email è stata modificata. (es. https://www.example.com/path-to-email-template.html)
Le variabili Email e OldEmail sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
The email address for your account was changed from {{ .OldEmail }} to {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_EMAIL_CHANGED_ENABLED` - `bool`Se inviare un'email di notifica quando l'email di un utente viene modificata. Il valore predefinito è false.
GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION - string
Percorso URL di un modello di email da utilizzare quando si notifica a un utente che il suo numero di telefono è stato modificato. (es. https://www.example.com/path-to-email-template.html)
Le variabili Email, Phone e OldPhone sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
The phone number for your account was changed from {{ .OldPhone }} to {{ .Phone }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_PHONE_CHANGED_ENABLED` - `bool`Indica se inviare un'email di notifica quando il numero di telefono di un utente viene modificato. Il valore predefinito è false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION - string
Percorso URL di un modello di email da utilizzare per notificare a un utente che un metodo di accesso è stato collegato al suo account. (es. https://www.example.com/path-to-email-template.html)
Le variabili Email e Provider sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
Your {{ .Provider }} account was linked as a new sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_LINKED_ENABLED` - `bool`Se inviare un'email di notifica quando un metodo di accesso viene collegato all'account di un utente. Il valore predefinito è false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION - string
Percorso URL di un modello di email da utilizzare per notificare a un utente che un metodo di accesso è stato rimosso dal suo account. (es. https://www.example.com/path-to-email-template.html)
Sono disponibili le variabili Email e Provider.
Contenuto predefinito (se il modello non è disponibile):```html
Your {{ .Provider }} account was removed as a sign-in method for {{ .Email }}.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_IDENTITY_UNLINKED_ENABLED` - `bool`Se inviare un'email di notifica quando un metodo di accesso viene rimosso dall'account di un utente. Il valore predefinito è false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION - string
Percorso URL di un modello email da utilizzare quando si notifica a un utente che un nuovo metodo di verifica è stato aggiunto al proprio account. (es. https://www.example.com/path-to-email-template.html)
Le variabili Email e FactorType sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
Sign-in verification method {{ .FactorType }} was added to your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_ENROLLED_ENABLED` - `bool`Se inviare un'email di notifica quando un nuovo metodo di verifica viene aggiunto all'account di un utente. Il valore predefinito è false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION - string
Percorso URL di un modello di email da utilizzare quando si notifica a un utente che un metodo di verifica è stato rimosso dal suo account. (ad es. https://www.example.com/path-to-email-template.html)
Le variabili Email e FactorType sono disponibili.
Contenuto predefinito (se il modello non è disponibile):```html
Sign-in verification method {{ .FactorType }} was removed from your account.
If you didn't make this change, contact support immediately.
``` `GOTRUE_MAILER_NOTIFICATIONS_MFA_FACTOR_UNENROLLED_ENABLED` - `bool`Indica se inviare un'email di notifica quando un metodo di verifica viene rimosso da un account utente. Il valore predefinito è false.
SMS_AUTOCONFIRM - bool
Se non è richiesta la conferma telefonica, puoi impostarlo su true. Il valore predefinito è false.
SMS_MAX_FREQUENCY - number
Controlla il periodo minimo di tempo che deve trascorrere prima di inviare un altro SMS OTP. Il valore è espresso in secondi. Il valore predefinito è 60 (1 minuto).
SMS_OTP_EXP - number
Controlla la durata di validità di un SMS OTP.
SMS_OTP_LENGTH - number
Controlla il numero di cifre dell'SMS OTP inviato.
SMS_PROVIDER - string
Le opzioni disponibili sono: twilio, messagebird, textlocal e vonage
Quindi puoi utilizzare le tue credenziali twilio:
SMS_TWILIO_ACCOUNT_SIDSMS_TWILIO_AUTH_TOKENSMS_TWILIO_MESSAGE_SERVICE_SID - può essere impostato sul tuo numero di cellulare del mittente twilioOppure le credenziali Messagebird, che possono essere ottenute nella Dashboard:
SMS_MESSAGEBIRD_ACCESS_KEY - la tua chiave di accesso MessagebirdSMS_MESSAGEBIRD_ORIGINATOR - mittente SMS (il tuo numero di telefono Messagebird con + o nome dell'azienda)captcha_token ed effettuerà una richiesta di verifica al provider CAPTCHA.SECURITY_CAPTCHA_ENABLED - string
Indica se il middleware captcha è abilitato
SECURITY_CAPTCHA_PROVIDER - string
per ora le uniche opzioni supportate sono: hCaptcha e Turnstile
SECURITY_CAPTCHA_SECRET - stringSECURITY_CAPTCHA_TIMEOUT - stringRecupera dall'account hcaptcha o turnstile
SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION - bool
Impone la riautenticazione all'aggiornamento della password.
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED - bool
Utilizza questa opzione per abilitare/disabilitare gli accessi anonimi.
GOTRUE_SECURITY_SB_FORWARDED_FOR_ENABLED - bool
Abilita l'inoltro dell'indirizzo IP utilizzando l'header della richiesta HTTP Sb-Forwarded-For. Quando abilitato, Auth analizzerà il primo valore di questo header come indirizzo IP e lo utilizzerà per il monitoraggio dell'indirizzo IP e il rate limiting. Assicurati che questo header sia completamente attendibile prima di abilitare questa funzionalità, passandolo solo da client o proxy affidabili.
Auth espone i seguenti endpoint:
Restituisce le impostazioni disponibili pubblicamente per questa istanza di auth.```json { "external": { "apple": true, "azure": true, "bitbucket": true, "discord": true, "facebook": true, "figma": true, "github": true, "gitlab": true, "google": true, "keycloak": true, "linkedin": true, "notion": true, "slack": true, "snapchat": true, "spotify": true, "twitch": true, "twitter": true, "workos": true }, "disable_signup": false, "autoconfirm": false }
### **POST, PUT /admin/users/<user_id>**
Crea (POST) o aggiorna (PUT) l'utente in base allo `user_id` specificato. Il campo `ban_duration` accetta le seguenti unità di tempo: "ns", "us", "ms", "s", "m", "h". Vedi [`time.ParseDuration`](https://pkg.go.dev/time#ParseDuration) per maggiori dettagli sul formato utilizzato.```js
headers:
{
"Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // requires a role claim that can be set in the GOTRUE_JWT_ADMIN_ROLES env var
}
body:
{
"role": "test-user",
"email": "[email protected]",
"phone": "12345678",
"password": "secret", // only if type = signup
"email_confirm": true,
"phone_confirm": true,
"user_metadata": {},
"app_metadata": {},
"ban_duration": "24h" or "none" // to unban a user
}
Restituisce il link di azione email corrispondente in base al tipo specificato. Tra le altre cose, la risposta contiene anche i parametri di query del link di azione come campi JSON separati per comodità (insieme all'OTP email da cui viene generato il token corrispondente).```js headers: { "Authorization": "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" // admin role required }
body: { "type": "signup" or "magiclink" or "recovery" or "invite" or "email_change_current" or "email_change_new", "email": "[email protected]", "password": "secret", // only if type = signup "data": { ... }, // only if type = signup "redirect_to": "https://supabase.io" // Redirect URL to send the user to after an email action. Defaults to SITE_URL.
}
Restituisce```js
{
"action_link": "http://localhost:9999/verify?token=TOKEN&type=TYPE&redirect_to=REDIRECT_URL",
"email_otp": "EMAIL_OTP",
"hashed_token": "TOKEN",
"verification_type": "TYPE",
"redirect_to": "REDIRECT_URL",
...
}
Registra un nuovo utente con un'email e una password.```json { "email": "[email protected]", "password": "secret" }
returns:```js
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
// if sign up is a duplicate then faux data will be returned
// as to not leak information about whether a given email
// has an account with your service or not
Registra un nuovo utente con un numero di telefono e una password.```js { "phone": "12345678", // follows the E.164 format "password": "secret" }
Restituisce:```js
{
"id": "11111111-2222-3333-4444-5555555555555", // if duplicate sign up, this ID will be faux
"phone": "12345678",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
se AUTOCONFIRM è abilitato e la registrazione è un duplicato, allora l'endpoint restituirà:```json { "code": 400, "msg": "User already registered" }
### **POST /resend**
Consente a un utente di reinviare un OTP esistente di signup, sms, email_change o phone_change.```json
{
"email": "[email protected]",
"type": "signup"
}
Please provide the Markdown content to translate.```json { "phone": "12345678", "type": "sms" }
Restituisce:```json
{
"message_id": "msgid123456"
}
Invita un nuovo utente con un'email.
Questo endpoint richiede il JWT service_role o supabase_admin impostato come header Auth Bearer:
es.```js headers: { "Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" }
(empty)```json
{
"email": "[email protected]"
}
Restituisce:```json { "id": "11111111-2222-3333-4444-5555555555555", "email": "[email protected]", "confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00", "created_at": "2016-05-15T19:53:12.368652374-07:00", "updated_at": "2016-05-15T19:53:12.368652374-07:00", "invited_at": "2016-05-15T19:53:12.368652374-07:00" }
### **POST /verify**
Verifica una registrazione o un recupero password. Il tipo può essere `signup`, `recovery`, `invite`, `magiclink`, `email_change`, `sms` o `phone_change` e il `token` è un token restituito da `/signup` o `/recover`.```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email"
}
password è richiesto per la verifica della registrazione se non esiste già una password.
Restituisce:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token", "type": "signup | recovery | invite | magiclink | email_change | sms | phone_change" }
Verifica una registrazione telefonica o un OTP via SMS. Il tipo deve essere impostato su `sms`.```json
{
"type": "sms",
"token": "confirmation-otp-delivered-in-sms",
"redirect_to": "https://supabase.io",
"phone": "phone-number-sms-otp-was-delivered-to"
}
Restituisce:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /verify**
Verifica una registrazione o un recupero password. Il tipo può essere `signup`, `recovery`, `magiclink`, `invite` o `email_change`
e il `token` è un token restituito da `/signup`, `/recover` o `/magiclink`.
Parametri di query:```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email",
"redirect_to": "https://supabase.io"
}
L'utente verrà autenticato e reindirizzato a:``` SITE_URL/#access_token=jwt-token-representing-the-user&token_type=bearer&expires_in=3600&refresh_token=a-refresh-token&type=invite
La tua app dovrebbe rilevare i parametri di query nel frammento e usarli per impostare la sessione (supabase-js lo fa automaticamente)
Puoi usare il parametro `type` per reindirizzare l'utente a un modulo per l'impostazione della password in caso di `invite` o `recovery`,
oppure mostrare un messaggio di account confermato/bentornato in caso di `signup`, o indirizzarlo a un flusso di onboarding aggiuntivo
### **POST /otp**
One-Time-Password. Consegnarà un magic link o un SMS OTP all'utente a seconda che il corpo della richiesta contenga una chiave "email" o "phone".
Se `"create_user": true`, l'utente non verrà registrato automaticamente se l'utente non esiste.```js
{
"phone": "12345678" // follows the E.164 format
"create_user": true
}
OR```js // exactly the same as /magiclink { "email": "[email protected]" "create_user": true }
Restituisce:```json
{}
Magic Link. Verrà consegnato un link (es. /verify?type=magiclink&token=fgtyuf68ddqdaDd) all'utente in base all'indirizzo email, che potrà utilizzare per riscattare un access_token.
Per impostazione predefinita, i Magic Link possono essere inviati solo una volta ogni 60 secondi.```json { "email": "[email protected]" }
Restituisce:```json
{}
Quando si fa clic sul link magico, verrà reindirizzato a <SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=magiclink (vedi /verify sopra)
Recupero password. Invierà una mail di recupero password all'utente in base all'indirizzo email.
Per impostazione predefinita, i link di recupero possono essere inviati solo una volta ogni 60 secondi.```json { "email": "[email protected]" }
Restituisce:```json
{}
Questo è un endpoint OAuth2 che attualmente implementa i tipi di concessione password e refresh_token
parametri di query:``` ?grant_type=password
body:```js
// Email login
{
"email": "[email protected]",
"password": "somepassword"
}
// Phone login
{
"phone": "12345678",
"password": "somepassword"
}
oppure
parametri di query:``` grant_type=refresh_token
body:```json
{
"refresh_token": "a-refresh-token"
}
Una volta ottenuto un token di accesso, puoi accedere ai metodi che richiedono autenticazione
impostando l'header Authorization: Bearer YOUR_ACCESS_TOKEN_HERE.
Restituisce:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /user**
Ottieni l'oggetto JSON per l'utente connesso (richiede autenticazione)
Restituisce:```json
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"confirmation_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
Aggiorna un utente (richiede autenticazione). Oltre a modificare email/password, questo metodo può essere utilizzato per impostare dati utente personalizzati. La modifica dell'email comporterà l'invio di un magic link.```json { "email": "[email protected]", "password": "new-password", "phone": "+123456789", "data": { "key": "value", "number": 10, "admin": false } }
Restituisce:```json
{
"id": "11111111-2222-3333-4444-5555555555555",
"email": "[email protected]",
"email_change_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"phone": "+123456789",
"phone_change_sent_at": "2016-05-15T20:49:40.882805774-07:00",
"created_at": "2016-05-15T19:53:12.368652374-07:00",
"updated_at": "2016-05-15T19:53:12.368652374-07:00"
}
Se GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION è abilitato, l'utente dovrà prima riautenticarsi.```json
{
"password": "new-password",
"nonce": "123456"
}
### **GET /reauthenticate**
Invia un nonce all'email dell'utente (preferita) o al telefono. Questo endpoint richiede che l'utente abbia effettuato l'accesso / sia autenticato. L'utente deve avere un'email o un numero di telefono affinché il nonce possa essere inviato con successo.```js
headers: {
"Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO"
}
Esegue il logout di un utente (richiede autenticazione).
Questo revocherà tutti i refresh token per l'utente. Ricorda che i token JWT rimarranno validi per l'autenticazione stateless fino alla loro scadenza.
Ottieni access_token dal provider OAuth esterno
query params:``` provider=apple | azure | bitbucket | discord | facebook | figma | github | gitlab | google | keycloak | linkedin | notion | slack | snapchat | spotify | twitch | twitter | workos
scopes=<optional additional scopes depending on the provider (email and name are requested by default)>
Redirects to provider and then to `/callback`
For Apple-specific setup see: <https://github.com/supabase/auth#apple-oauth>
### **GET /callback**
External provider should redirect to this endpoint
Redirects to `<GOTRUE_SITE_URL>#access_token=<access_token>&refresh_token=<refresh_token>&provider_token=<provider_oauth_token>&expires_in=3600&provider=<provider_name>`
If additional scopes were requested then `provider_token` will be populated, you can use this to fetch additional data from the provider or interact with their services
twitterworkos