
API на основе JWT для управления пользователями и выдачи JWT-токенов
Auth — это сервер аутентификации и управления пользователями, написанный на Go, который обеспечивает работу таких функций Supabase, как:
Изначально он основан на отличном коде GoTrue от Netlify, однако с тех пор обе реализации значительно разошлись в возможностях и функциональности.
Если вы хотите внести вклад в проект, пожалуйста, обратитесь к руководству по внесению вклада.
Создайте файл .env для хранения собственных переменных окружения. См. example.env
docker-compose -f docker-compose-dev.yml up postgresmake build . Вы должны увидеть вывод, похожий на этот:```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. Выполните бинарный файл auth: `./auth`
### Если у вас установлен Docker
Создайте файл `.env.docker` для хранения собственных переменных окружения. См. [`example.docker.env`](https://github.com/supabase/auth/blob/HEAD/example.docker.env)
1. `make build`
2. `make dev`
3. `docker ps` должен показать два Docker-контейнера (`auth-auth-1` и `auth-postgres-1`)
4. Вот и всё! Перейдите к [конечной точке проверки состояния](http://localhost:9999/health), чтобы убедиться, что auth запущен.
## Запуск в производственной среде
Запуск сервера аутентификации в производственной среде — непростая задача. Мы
рекомендуем использовать [Supabase Auth](https://supabase.com/auth), который регулярно
получает обновления безопасности.
В противном случае убедитесь, что вы настроили процесс своевременного обновления до
последней версии. Это можно сделать, следя за этим репозиторием, в частности за
разделами [Releases](https://github.com/supabase/auth/releases) и [Security
Advisories](https://github.com/supabase/auth/security/advisories).
### Обратная совместимость
Auth использует схему [Semantic Versioning](https://semver.org). Ниже приведены
дополнительные разъяснения гарантий обратной совместимости:
**Совместимость Go API**
Auth не предназначен для использования в качестве библиотеки Go. Нет никаких гарантий
обратной совместимости API при таком использовании, независимо от того, какой номер
версии изменяется.
**Патч**
Изменения патч-версии гарантируют обратную совместимость с:
- объектами базы данных (таблицы, столбцы, индексы, функции).
- REST API
- структурой JWT
- конфигурацией
Гарантированные примеры:
- Столбец не изменит свой тип.
- Таблица не изменит свой первичный ключ.
- Индекс не будет удалён.
- Ограничение уникальности не будет удалено.
- REST API не будет удалён.
- Параметры REST API будут работать так же, как и раньше (или лучше, если ошибка
была исправлена).
- Конфигурация не изменится.
Негарантированные примеры:
- Таблица может добавить новые столбцы.
- Столбцы в таблице могут быть переупорядочены.
- Неуникальные ограничения могут быть удалены (проверки на уровне базы данных, null, значения
по умолчанию).
- JWT может добавлять новые свойства.
**Минорная версия**
Изменения минорной версии гарантируют обратную совместимость с:
- REST API
- структурой JWT
- конфигурацией
Исключения из этих гарантий допускаются только в тех случаях, когда обнаружены
серьёзные проблемы безопасности, которые невозможно устранить иным способом.
Гарантированные примеры:
- Существующие API могут быть объявлены устаревшими, но продолжат работать в течение следующих нескольких минорных
выпусков версий.
- Изменения конфигурации могут быть объявлены устаревшими, но продолжат работать в течение следующих
нескольких минорных выпусков версий.
- Уже выпущенные JWT будут приниматься, но новые JWT могут иметь другую
структуру (но обычно аналогичную).
Негарантированные примеры:
- Удаление полей JWT после уведомления об устаревании.
- Удаление некоторых API после уведомления об устаревании.
- Удаление входа через внешних провайдеров после уведомления об устаревании.
- Удаление, усечение, существенные изменения схемы таблиц, индексов, представлений,
функций.
Мы стремимся предоставлять уведомление об устаревании в журналах выполнения как минимум
для двух мажорных выпусков версий или в течение двух недель, если выходит несколько
релизов. Совместимость будет гарантироваться, пока уведомление активно.
**Мажорная версия**
Изменения мажорной версии не гарантируют обратной совместимости с
предыдущими версиями.
### Унаследованные функции
Некоторые унаследованные функции из кодовой базы Netlify не поддерживаются
Supabase и могут быть удалены без предварительного уведомления в будущем. Вот
полный список этих функций:
1. Мультиарендность через таблицу `instances`, т.е. `GOTRUE_MULTI_INSTANCE_MODE`
параметр конфигурации.
2. Системный пользователь (пользователь с нулевым UUID).
3. Супер-администратор через столбец `is_super_admin`.
4. Информация о группах в JWT через `GOTRUE_JWT_ADMIN_GROUP_NAME` и другие
поля конфигурации.
5. Подпись JWT. Supabase Auth поддерживает асимметричные ключи (RS256 по умолчанию;
ECC/Ed25519 опционально). HS256 по-прежнему поддерживается для совместимости, но
рекомендуется перейти на асимметричные ключи для упрощения проверки и
ротации. Будущие удаления будут объявлены в журнале изменений. См.
[JWT Signing Keys](https://supabase.com/docs/guides/auth/signing-keys) и
[JWTs guide](https://supabase.com/docs/guides/auth/jwts) для подробностей.
Обратите внимание, что это не исчерпывающий список, и он может измениться.
### Рекомендации при самостоятельном размещении
Вот несколько рекомендаций, которым следует следовать при самостоятельном размещении,
чтобы обеспечить обратную совместимость с Auth:
1. Не изменяйте схему, управляемую Auth. Вы можете просмотреть все
миграции в каталоге `migrations`.
2. Не полагайтесь на схему и структуру данных в базе данных. Всегда используйте
API Auth и JWT для получения информации о пользователях.
3. Всегда запускайте Auth за прокси с поддержкой TLS, например балансировщиком нагрузки, CDN,
nginx или другим подобным программным обеспечением.
## Конфигурация
Вы можете настроить Auth, используя файл конфигурации `.env`,
переменные окружения или их комбинацию. Переменные окружения имеют префикс `GOTRUE_` и всегда имеют приоритет над значениями, указанными в файле.
### Верхний уровень```properties
GOTRUE_SITE_URL=https://example.netlify.com/
SITE_URL - string обязательно
Базовый URL, по которому расположен ваш сайт. В настоящее время используется в сочетании с другими настройками для формирования URL-адресов, используемых в электронных письмах. Любой URI, у которого общий хост с SITE_URL, является допустимым значением для параметров redirect_to (см. /authorize и т.д.).
URI_ALLOW_LIST - string
Список URI, разделённых запятыми (например, "https://foo.example.com,https://*.foo.example.com,https://bar.example.com"), которые разрешены в качестве допустимых направлений redirect_to. По умолчанию — []. Поддерживает сопоставление с подстановочными знаками с помощью glob-шаблонов. Например, https://*.foo.example.com разрешит принимать https://a.foo.example.com и https://b.foo.example.com. Glob-шаблоны также поддерживаются для поддоменов. Например, https://foo.example.com/* разрешит принимать https://foo.example.com/page1 и https://foo.example.com/page2.
Дополнительные распространённые glob-шаблоны см. по следующей ссылке.
OPERATOR_TOKEN - string только для мультиинстансного режима
Общий секрет с оператором (обычно Netlify) для этого микросервиса. Используется для проверки того, что запросы были проксированы через оператора и значениям полезной нагрузки можно доверять.
DISABLE_SIGNUP - bool
Когда регистрация отключена, единственный способ создать новых пользователей — через приглашения. По умолчанию — false, все регистрации включены.
GOTRUE_EXTERNAL_EMAIL_ENABLED - bool
Используйте это для отключения регистрации по электронной почте (пользователи по-прежнему могут использовать внешних OAuth-провайдеров для регистрации / входа)
GOTRUE_EXTERNAL_PHONE_ENABLED - bool
Используйте это для отключения регистрации по телефону (пользователи по-прежнему могут использовать внешних OAuth-провайдеров для регистрации / входа)
GOTRUE_RATE_LIMIT_HEADER - string
Заголовок, на основе которого ограничивается частота запросов к конечной точке /token. Ожидается, что этот заголовок будет устанавливаться доверенным вышестоящим прокси (например, Kong или Envoy). Такие заголовки, как x-forwarded-for, могут быть подделаны, и им нельзя доверять при ограничении частоты запросов, если они передаются напрямую клиентом.
GOTRUE_RATE_LIMIT_EMAIL_SENT - string
Ограничивает количество писем, отправляемых в час, на следующих конечных точках: /signup, /invite, /magiclink, /recover, /otp и /user.
GOTRUE_PASSWORD_MIN_LENGTH - int
Минимальная длина пароля, по умолчанию 6.
GOTRUE_PASSWORD_REQUIRED_CHARACTERS - строка наборов символов, разделённых :. Пароль должен содержать хотя бы один символ из каждого набора, чтобы быть принятым. Чтобы использовать символ :, экранируйте его с помощью \.
GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED - bool
Если включена ротация refresh-токенов, auth автоматически обнаружит вредоносные попытки повторного использования отозванного refresh-токена. При обнаружении вредоносной попытки GoTrue немедленно отзывает все токены, произошедшие от проблемного токена.
GOTRUE_SECURITY_REFRESH_TOKEN_REUSE_INTERVAL - string
Эта настройка применима только в том случае, если включён параметр GOTRUE_SECURITY_REFRESH_TOKEN_ROTATION_ENABLED. Интервал повторного использования refresh-токена позволяет обменивать refresh-токен несколько раз в течение этого интервала для поддержки конкурентности или проблем с офлайн-доступом. В течение интервала повторного использования auth не будет рассматривать использование отозванного токена как вредоносную попытку и просто вернёт дочерний refresh-токен.
Повторно использовать можно только предыдущий отозванный токен. Использование старого refresh-токена задолго до текущего действительного refresh-токена вызовет обнаружение повторного использования.
GOTRUE_API_HOST=localhost PORT=9999 API_EXTERNAL_URL=http://localhost:9999
`API_HOST` - `string`
Имя хоста для прослушивания.
`PORT` (no prefix) / `API_PORT` - `number`
Номер порта для прослушивания. По умолчанию — `8081`.
`API_ENDPOINT` - `string` _Только для многокомпонентного режима_
Управляет конечной точкой, через которую Netlify может обращаться к этому API.
`API_EXTERNAL_URL` - `string` **обязательно**
URL, по которому может быть доступен GoTrue.
`REQUEST_ID_HEADER` - `string`
Если вы хотите унаследовать идентификатор запроса из входящего запроса, укажите его имя в этом значении.
### База данных```properties
GOTRUE_DB_DRIVER=postgres
DATABASE_URL=root@localhost/auth
DB_DRIVER - string обязательно
Выбирает диалект базы данных. Должно быть postgres.
DATABASE_URL (без префикса) / DB_DATABASE_URL - string обязательно
Строка подключения к базе данных.
GOTRUE_DB_MAX_POOL_SIZE - int
Задаёт максимальное количество открытых соединений с базой данных. По умолчанию 0, что эквивалентно «неограниченному» числу соединений.
DB_NAMESPACE - string
Добавляет префикс ко всем именам таблиц.
Примечание о миграциях
Миграции применяются автоматически при запуске ./auth. Однако у вас также есть возможность перезапустить миграции следующими способами:
./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`
Управляет тем, какие уровни логирования выводятся. Выберите `panic`, `fatal`, `error`, `warn`, `info` или `debug`. По умолчанию — `info`.
`LOG_FILE` — `string`
Если вы хотите записывать логи в файл, укажите в `log_file` допустимый путь к файлу.
### Наблюдаемость
В Auth встроена базовая наблюдаемость. Он может экспортировать
метрики и трейсы [OpenTelemetry](https://opentelemetry.io) в коллектор.
#### Трейсинг
Чтобы включить трейсинг, настройте эти переменные:
`GOTRUE_TRACING_ENABLED` — `bool`
`GOTRUE_TRACING_EXPORTER` — `string`, поддерживается только `opentelemetry`
Убедитесь, что вы также настроили конфигурацию [OpenTelemetry
Exporter](https://opentelemetry.io/docs/reference/specification/protocol/exporter/)
для вашего коллектора или сервиса.
Например, если вы используете
[Honeycomb.io](https://docs.honeycomb.io/getting-data-in/opentelemetry/go-distro/#using-opentelemetry-without-the-honeycomb-distribution),
вам следует задать эти стандартные переменные OTLP 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"
Чтобы включить метрики, настройте эти переменные:
GOTRUE_METRICS_ENABLED - boolean
GOTRUE_METRICS_EXPORTER - string, поддерживаются только opentelemetry и prometheus
Убедитесь, что вы также настроили конфигурацию OpenTelemetry Exporter для вашего коллектора или сервиса.
Если вы используете экспортер prometheus, хост и порт сервера можно
настроить с помощью этих стандартных переменных OpenTelemetry:
OTEL_EXPORTER_PROMETHEUS_HOST - IP-адрес, по умолчанию 0.0.0.0
OTEL_EXPORTER_PROMETHEUS_PORT - номер порта, по умолчанию 9100
Метрики экспортируются по пути / на сервере.
Если вы используете экспортер opentelemetry, метрики отправляются в
коллектор.
Например, если вы используете Honeycomb.io, вам следует задать эти стандартные переменные OTLP 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"
Обратите внимание, что Honeycomb.io требует платного тарифа для приёма метрик.
Если вам нужно отладить проблему с трейсами или метриками, которые не отправляются, вы можете установить `DEBUG=true`, чтобы получить больше информации от OpenTelemetry SDK.
#### Пользовательские атрибуты ресурсов
При использовании экспортёра трейсов или метрик OpenTelemetry вы можете задать пользовательские атрибуты ресурсов с помощью [стандартной переменной окружения `OTEL_RESOURCE_ATTRIBUTES`](https://opentelemetry.io/docs/reference/specification/resource/sdk/#specifying-resource-information-via-an-environment-variable).
Предоставляется атрибут по умолчанию `auth.version`, содержащий версию сборки.
#### Трассировка HTTP-маршрутов
Все HTTP-вызовы к Auth API трассируются. Маршруты используют параметризованную версию маршрута, а значения параметров маршрута можно найти в атрибуте спана `http.route.params.<route-key>`.
Например, следующий запрос:```
GET /admin/users/4acde936-82dc-4552-b851-831fb8ce0927/
будет отслеживаться как:``` http.method = GET http.route = /admin/users/{user_id} http.route.params.user_id = 4acde936-82dc-4552-b851-831fb8ce0927
#### Метрики Go runtime и HTTP
Все метрики Go runtime предоставляются. Некоторые HTTP-метрики также собираются по умолчанию.
### JSON Web Tokens (JWT)```properties
GOTRUE_JWT_SECRET=supersecretvalue
GOTRUE_JWT_EXP=3600
GOTRUE_JWT_AUD=netlify
JWT_SECRET - string обязательно
Секрет, используемый для подписи JWT-токенов.
JWT_EXP - number
Сколько времени токены действительны, в секундах. По умолчанию: 3600 (1 час).
JWT_AUD - string
Аудитория JWT по умолчанию. Используйте аудитории для группировки пользователей.
JWT_ADMIN_GROUP_NAME - string
Название группы администраторов (если включено). По умолчанию: admin.
JWT_DEFAULT_GROUP_NAME - string
Группа по умолчанию, в которую назначаются все новые пользователи.
Мы поддерживаем внешнюю аутентификацию через apple, azure, bitbucket, discord, facebook, figma, github, gitlab, google, keycloak, linkedin, notion, snapchat, spotify, slack, twitch, и .
Используйте эти названия в качестве ключей внутри external, чтобы настроить каждого провайдера отдельно.```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
No external providers are required, but you must provide the required values if you choose to enable any.
`EXTERNAL_X_ENABLED` - `bool`
Whether this external provider is enabled or not
`EXTERNAL_X_CLIENT_ID` - `string` **required**
The OAuth2 Client ID registered with the external provider.
`EXTERNAL_X_SECRET` - `string` **required**
The OAuth2 Client Secret provided by the external provider when you registered.
`EXTERNAL_X_REDIRECT_URI` - `string` **required**
The URI a OAuth2 provider will redirect to with the `code` and `state` values.
`EXTERNAL_X_URL` - `string`
The base URL used for constructing the URLs to request authorization and access tokens. Used by `gitlab` and `keycloak`. For `gitlab` it defaults to `https://gitlab.com`. For `keycloak` you need to set this to your instance, for example: `https://keycloak.example.com/realms/myrealm`
#### Network hardening
Configuring an external authentication provider causes Auth to make outbound HTTP requests to that provider's authorization, token, and userinfo endpoints. Configuring a provider either via `GOTRUE_EXTERNAL_*` settings or an admin API is an administrative action, and doing so implies trust in the hosts and URLs that will be contacted.
The network Auth runs in should be hardened so these outbound connections cannot reach internal-only resources you don't want exposed, such as `localhost`/loopback addresses or cloud metadata endpoints (e.g. `169.254.169.254`). This matters most for providers with admin-configurable or discoverable endpoints (e.g. custom OAuth/OIDC providers), where a misconfigured or malicious URL could otherwise be used to reach internal infrastructure.
#### Apple OAuth
To try out external authentication with Apple locally, you will need to do the following:
1. Remap localhost to \<my_custom_dns \> in your `/etc/hosts` config.
2. Configure auth to serve HTTPS traffic over localhost by replacing `ListenAndServe` in [api.go](https://github.com/supabase/auth/blob/HEAD/internal/api/api.go) with: ```
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, следуя этому руководству!Отправка электронных писем не обязательна, но настоятельно рекомендуется для восстановления пароля. Если эта функция включена, необходимо указать требуемые значения ниже.```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` **required**
Адрес электронной почты `From` для всех отправляемых писем.
`SMTP_HOST` - `string` **required**
Имя хоста почтового сервера, через который отправляются письма.
`SMTP_PORT` - `number` **required**
Номер порта для подключения к почтовому серверу.
`SMTP_USER` - `string`
Если почтовый сервер требует аутентификации — имя пользователя.
`SMTP_PASS` - `string`
Если почтовый сервер требует аутентификации — пароль.
`SMTP_MAX_FREQUENCY` - `number`
Управляет минимальным промежутком времени, который должен пройти перед отправкой очередного письма с подтверждением регистрации или сбросом пароля. Значение указывается в секундах. По умолчанию — 900 (15 минут).
`SMTP_SENDER_NAME` - `string`
Задаёт имя отправителя. По умолчанию используется `SMTP_ADMIN_EMAIL`, если имя не указано.
`MAILER_AUTOCONFIRM` - `bool`
Если подтверждение email не требуется, можно установить значение `true`. По умолчанию — `false`.
`MAILER_OTP_EXP` - `number`
Управляет сроком действия ссылки в письме или одноразового пароля (OTP).
`MAILER_URLPATHS_INVITE` - `string`
Путь URL, используемый в письме с приглашением пользователя. По умолчанию — `/verify`.
`MAILER_URLPATHS_CONFIRMATION` - `string`
Путь URL, используемый в письме с подтверждением регистрации. По умолчанию — `/verify`.
`MAILER_URLPATHS_RECOVERY` - `string`
Путь URL, используемый в письме для сброса пароля. По умолчанию — `/verify`.
`MAILER_URLPATHS_EMAIL_CHANGE` - `string`
Путь URL, используемый в письме с подтверждением смены email. По умолчанию — `/verify`.
`MAILER_SUBJECTS_INVITE` - `string`
Тема письма для приглашения пользователя. По умолчанию — `You've been invited`.
`MAILER_SUBJECTS_CONFIRMATION` - `string`
Тема письма для подтверждения регистрации. По умолчанию — `Confirm your email address`.
`MAILER_SUBJECTS_RECOVERY` - `string`
Тема письма для сброса пароля. По умолчанию — `Reset your password`.
`MAILER_SUBJECTS_MAGIC_LINK` - `string`
Тема письма для волшебной ссылки (magic link). По умолчанию — `Your sign-in link`.
`MAILER_SUBJECTS_EMAIL_CHANGE` - `string`
Тема письма для подтверждения смены email. По умолчанию — `Confirm your new email address`.
`MAILER_SUBJECTS_REAUTHENTICATION` - `string`
Тема письма для повторной аутентификации. По умолчанию — `{{ .Token }} is your verification code`.
`MAILER_SUBJECTS_PASSWORD_CHANGED_NOTIFICATION` - `string`
Тема письма для уведомления об изменении пароля. По умолчанию — `Your password was changed`.
`MAILER_SUBJECTS_EMAIL_CHANGED_NOTIFICATION` - `string`
Тема письма для уведомления об изменении email. По умолчанию — `Your email address was changed`.
`GOTRUE_MAILER_SUBJECTS_PHONE_CHANGED_NOTIFICATION` - `string`
Тема письма для уведомления об изменении номера телефона. По умолчанию — `Your phone number was changed`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_LINKED_NOTIFICATION` - `string`
Тема письма для уведомления о привязке способа входа. По умолчанию — `A new sign-in method was linked to your account`.
`GOTRUE_MAILER_SUBJECTS_IDENTITY_UNLINKED_NOTIFICATION` - `string`
Тема письма для уведомления об отвязке способа входа. По умолчанию — `A sign-in method was removed from your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_ENROLLED_NOTIFICATION` - `string`
Тема письма для уведомления о добавлении метода проверки. По умолчанию — `A new verification method was added to your account`.
`GOTRUE_MAILER_SUBJECTS_MFA_FACTOR_UNENROLLED_NOTIFICATION` - `string`
Тема письма для уведомления об удалении метода проверки. По умолчанию — `A verification method was removed from your account`.
`MAILER_TEMPLATES_INVITE` - `string`
URL-путь к шаблону письма, используемому при приглашении пользователя. (например, `https://www.example.com/path-to-email-template.html`)
Доступны переменные `SiteURL`, `Email` и `ConfirmationURL`.
Содержимое по умолчанию (если шаблон недоступен):```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
URL-путь к шаблону электронного письма, используемому при подтверждении регистрации. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные SiteURL, Email и ConfirmationURL.
Содержимое по умолчанию (если шаблон недоступен):```html
Follow the link below to confirm this email address and finish signing up.
``` `MAILER_TEMPLATES_RECOVERY` - `string`URL-путь к шаблону электронного письма, используемому при сбросе пароля. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные SiteURL, Email и ConfirmationURL.
Содержимое по умолчанию (если шаблон недоступен):```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`URL-путь к шаблону электронного письма, используемому при отправке magic link. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные SiteURL, Email и ConfirmationURL.
Содержимое по умолчанию (если шаблон недоступен):```html
Follow the link below to sign in. This link expires shortly and can only be used once.
``` `MAILER_TEMPLATES_EMAIL_CHANGE` - `string`URL-путь к шаблону электронного письма, используемому при подтверждении смены адреса электронной почты. (например, https://www.example.com/path-to-email-template.html)
Переменные SiteURL, Email, NewEmail и ConfirmationURL доступны.
Содержимое по умолчанию (если шаблон недоступен):```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`URL-путь к шаблону электронного письма, используемому при повторной аутентификации пользователя. (например, https://www.example.com/path-to-email-template.html)
Доступна переменная Token.
Содержимое по умолчанию (если шаблон недоступен):```html
Use the code below to verify your identity. It expires shortly.
{{ .Token }}
``` `MAILER_TEMPLATES_PASSWORD_CHANGED_NOTIFICATION` - `string`URL-путь к шаблону электронного письма, используемому при уведомлении пользователя о смене пароля. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные Email.
Содержимое по умолчанию (если шаблон недоступен):```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`Нужно ли отправлять уведомление по электронной почте при изменении пароля пользователя. По умолчанию — false.
MAILER_TEMPLATES_EMAIL_CHANGED_NOTIFICATION - string
URL-путь к шаблону электронного письма, используемому для уведомления пользователя о том, что его адрес электронной почты был изменён. (например, https://www.example.com/path-to-email-template.html). Доступны переменные Email и OldEmail.
Содержимое по умолчанию (если шаблон недоступен):```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`Следует ли отправлять уведомление по электронной почте при изменении адреса электронной почты пользователя. По умолчанию — false.
GOTRUE_MAILER_TEMPLATES_PHONE_CHANGED_NOTIFICATION - string
URL-путь к шаблону электронного письма, используемому для уведомления пользователя об изменении его номера телефона. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные Email, Phone и OldPhone.
Содержимое по умолчанию (если шаблон недоступен):```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`Отправлять ли уведомление по электронной почте при изменении номера телефона пользователя. По умолчанию false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_LINKED_NOTIFICATION - string
URL-путь к шаблону электронного письма, используемому при уведомлении пользователя о том, что к его учетной записи привязан способ входа. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные Email и Provider.
Содержимое по умолчанию (если шаблон недоступен):```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`Следует ли отправлять уведомление по электронной почте, когда к учётной записи пользователя привязан способ входа. По умолчанию false.
GOTRUE_MAILER_TEMPLATES_IDENTITY_UNLINKED_NOTIFICATION - string
URL-путь к шаблону письма, используемому при уведомлении пользователя о том, что способ входа был удалён из его учётной записи. (например, https://www.example.com/path-to-email-template.html)
Переменные Email и Provider доступны.
Содержимое по умолчанию (если шаблон недоступен):```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`Следует ли отправлять уведомление по электронной почте, когда метод входа удаляется из учётной записи пользователя. По умолчанию — false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_ENROLLED_NOTIFICATION - string
Путь URL к шаблону электронного письма для уведомления пользователя о том, что к его учётной записи добавлен новый метод проверки. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные Email и FactorType.
Содержимое по умолчанию (если шаблон недоступен):```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`Определяет, отправлять ли уведомление по электронной почте, когда к учётной записи пользователя добавляется новый метод проверки. По умолчанию — false.
GOTRUE_MAILER_TEMPLATES_MFA_FACTOR_UNENROLLED_NOTIFICATION - string
Путь URL к шаблону электронного письма, используемому для уведомления пользователя о том, что из его учётной записи был удалён метод проверки. (например, https://www.example.com/path-to-email-template.html)
Доступны переменные Email и FactorType.
Содержимое по умолчанию (если шаблон недоступен):```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`Определяет, отправлять ли уведомление по электронной почте, когда метод проверки удаляется из учётной записи пользователя. По умолчанию — false.
SMS_AUTOCONFIRM - bool
Если подтверждение по телефону не требуется, вы можете установить значение true. По умолчанию — false.
SMS_MAX_FREQUENCY - number
Управляет минимальным промежутком времени, который должен пройти перед отправкой следующего SMS-OTP. Значение указывается в секундах. По умолчанию — 60 (1 минута).
SMS_OTP_EXP - number
Управляет сроком действия SMS-OTP.
SMS_OTP_LENGTH - number
Управляет количеством цифр в отправляемом SMS-OTP.
SMS_PROVIDER - string
Доступные варианты: twilio, messagebird, textlocal и vonage
Затем вы можете использовать свои учётные данные Twilio:
SMS_TWILIO_ACCOUNT_SIDSMS_TWILIO_AUTH_TOKENSMS_TWILIO_MESSAGE_SERVICE_SID — можно указать номер мобильного телефона отправителя TwilioИли учётные данные Messagebird, которые можно получить в панели управления:
SMS_MESSAGEBIRD_ACCESS_KEY — ваш ключ доступа MessagebirdSMS_MESSAGEBIRD_ORIGINATOR — отправитель SMS (ваш номер телефона Messagebird с + или название компании)captcha_token и отправлять запрос на проверку провайдеру CAPTCHA.SECURITY_CAPTCHA_ENABLED - string
Включено ли промежуточное ПО CAPTCHA.
SECURITY_CAPTCHA_PROVIDER - string
пока поддерживаются только следующие варианты: hCaptcha и Turnstile
SECURITY_CAPTCHA_SECRET - stringSECURITY_CAPTCHA_TIMEOUT - stringПолучите их из учётной записи hCaptcha или Turnstile.
SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION - bool
Требовать повторную аутентификацию при обновлении пароля.
GOTRUE_EXTERNAL_ANONYMOUS_USERS_ENABLED - bool
Используйте это для включения/отключения анонимных входов.
GOTRUE_SECURITY_SB_FORWARDED_FOR_ENABLED - bool
Включает пересылку IP-адреса с использованием HTTP-заголовка Sb-Forwarded-For. Когда эта функция включена, Auth будет интерпретировать первое значение этого заголовка как IP-адрес и использовать его для отслеживания IP-адресов и ограничения частоты запросов. Перед включением этой функции убедитесь, что этому заголовку можно полностью доверять, передавая его только от проверенных клиентов или прокси.
Auth предоставляет следующие эндпоинты:
Возвращает общедоступные настройки этого экземпляра 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>**
Создаёт (POST) или обновляет (PUT) пользователя на основе указанного `user_id`. Поле `ban_duration` принимает следующие единицы времени: "ns", "us", "ms", "s", "m", "h". Подробнее об используемом формате см. [`time.ParseDuration`](https://pkg.go.dev/time#ParseDuration).```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
}
Возвращает соответствующую ссылку действия в email на основе указанного типа. Помимо прочего, ответ также содержит параметры запроса (query params) этой ссылки действия в виде отдельных полей JSON для удобства (вместе с email OTP, из которого генерируется соответствующий токен).```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.
}
Возвращает```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",
...
}
Регистрация нового пользователя с адресом электронной почты и паролем.```json { "email": "[email protected]", "password": "secret" }
возвращает:```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
Зарегистрируйте нового пользователя с номером телефона и паролем.```js { "phone": "12345678", // follows the E.164 format "password": "secret" }
Возвращает:```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"
}
если AUTOCONFIRM включен и регистрация является дубликатом, то endpoint вернет:```json { "code": 400, "msg": "User already registered" }
### **POST /resend**
Позволяет пользователю повторно отправить существующий OTP для signup, sms, email_change или phone_change.```json
{
"email": "[email protected]",
"type": "signup"
}
The input content is empty — there is no text to translate. Please provide the chunk content.```json { "phone": "12345678", "type": "sms" }
Возвращает:```json
{
"message_id": "msgid123456"
}
Приглашает нового пользователя по электронной почте.
Для этой конечной точки требуется JWT service_role или supabase_admin, установленный в заголовке Auth Bearer:
например,```js headers: { "Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO" }
INPUT is empty — no content was provided to translate. Please supply the Markdown chunk text.```json
{
"email": "[email protected]"
}
Возвращает:```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**
Проверка регистрации или восстановления пароля. Тип может быть `signup`, `recovery`, `invite`, `magiclink`, `email_change`, `sms` или `phone_change`,
а `token` — это токен, возвращаемый либо `/signup`, либо `/recover`.```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email"
}
password требуется для проверки при регистрации, если существующий пароль отсутствует.
Возвращает:```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" }
Проверьте регистрацию по телефону или SMS-OTP. Тип должен быть установлен в `sms`.```json
{
"type": "sms",
"token": "confirmation-otp-delivered-in-sms",
"redirect_to": "https://supabase.io",
"phone": "phone-number-sms-otp-was-delivered-to"
}
Возвращает:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /verify**
Проверка регистрации или восстановления пароля. Тип может быть `signup`, `recovery`, `magiclink`, `invite` или `email_change`.
А `token` — это токен, возвращаемый либо из `/signup`, либо из `/recover`, либо из `/magiclink`.
параметры запроса:```json
{
"type": "signup",
"token": "confirmation-code-delivered-in-email",
"redirect_to": "https://supabase.io"
}
Пользователь будет авторизован и перенаправлен на:``` SITE_URL/#access_token=jwt-token-representing-the-user&token_type=bearer&expires_in=3600&refresh_token=a-refresh-token&type=invite
Ваше приложение должно обнаруживать параметры запроса во фрагменте и использовать их для установки сессии (supabase-js делает это автоматически)
Вы можете использовать параметр `type`, чтобы перенаправить пользователя на форму установки пароля в случае `invite` или `recovery`,
показать сообщение о подтверждении аккаунта/приветственное сообщение в случае `signup` или направить его в дополнительный процесс онбординга
### **POST /otp**
Одноразовый пароль. Отправит пользователю magic-ссылку или SMS-OTP в зависимости от того, содержит ли тело запроса ключ "email" или "phone".
Если `"create_user": true`, пользователь не будет автоматически зарегистрирован, если он не существует.```js
{
"phone": "12345678" // follows the E.164 format
"create_user": true
}
ИЛИ```js // exactly the same as /magiclink { "email": "[email protected]" "create_user": true }
Возвращает:```json
{}
Magic Link. Отправит пользователю ссылку (например, /verify?type=magiclink&token=fgtyuf68ddqdaDd) на основе адреса электронной почты, по которой он может получить access_token.
По умолчанию Magic Links можно отправлять не чаще одного раза в 60 секунд.```json { "email": "[email protected]" }
Возвращает:```json
{}
Когда пользователь переходит по магической ссылке, происходит перенаправление на <SITE_URL>#access_token=x&refresh_token=y&expires_in=z&token_type=bearer&type=magiclink (см. /verify выше)
Восстановление пароля. Отправит пользователю письмо для восстановления пароля на основе адреса электронной почты.
По умолчанию ссылки для восстановления можно отправлять только один раз в 60 секунд```json { "email": "[email protected]" }
Возвращает:```json
{}
Это эндпоинт OAuth2, который в настоящее время реализует типы предоставления password и refresh_token
параметры запроса:``` ?grant_type=password
body:```js
// Email login
{
"email": "[email protected]",
"password": "somepassword"
}
// Phone login
{
"phone": "12345678",
"password": "somepassword"
}
или
параметры запроса:``` grant_type=refresh_token
body:```json
{
"refresh_token": "a-refresh-token"
}
После получения токена доступа вы можете получить доступ к методам, требующим аутентификации,
установив заголовок Authorization: Bearer YOUR_ACCESS_TOKEN_HERE.
Возвращает:```json { "access_token": "jwt-token-representing-the-user", "token_type": "bearer", "expires_in": 3600, "refresh_token": "a-refresh-token" }
### **GET /user**
Получить JSON-объект для авторизованного пользователя (требуется аутентификация)
Возвращает:```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"
}
Обновление пользователя (требуется аутентификация). Помимо изменения email/password, этот метод можно использовать для установки пользовательских данных. Изменение email приведёт к отправке magic link.```json { "email": "[email protected]", "password": "new-password", "phone": "+123456789", "data": { "key": "value", "number": 10, "admin": false } }
Возвращает:```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"
}
Если GOTRUE_SECURITY_UPDATE_PASSWORD_REQUIRE_REAUTHENTICATION включён, пользователю необходимо будет сначала повторно пройти аутентификацию.```json
{
"password": "new-password",
"nonce": "123456"
}
### **GET /reauthenticate**
Отправляет nonce на адрес электронной почты пользователя (предпочтительно) или на телефон. Этот endpoint требует, чтобы пользователь сначала выполнил вход / прошёл аутентификацию. Для успешной отправки nonce у пользователя должен быть указан адрес электронной почты или номер телефона.```js
headers: {
"Authorization" : "Bearer eyJhbGciOiJI...M3A90LCkxxtX9oNP9KZO"
}
Выход пользователя (требуется аутентификация).
Это отзовёт все refresh-токены для пользователя. Помните, что JWT-токены будут оставаться действительными для stateless-аутентификации до истечения их срока действия.
Получить access_token от внешнего OAuth-провайдера
параметры запроса:``` 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)>
Перенаправляет на провайдера, а затем на `/callback`
Для специфической настройки Apple см.: <https://github.com/supabase/auth#apple-oauth>
### **GET /callback**
Внешний провайдер должен перенаправлять на эту конечную точку
Перенаправляет на `<GOTRUE_SITE_URL>#access_token=<access_token>&refresh_token=<refresh_token>&provider_token=<provider_oauth_token>&expires_in=3600&provider=<provider_name>`
Если были запрошены дополнительные scopes, то `provider_token` будет заполнен; вы можете использовать его для получения дополнительных данных от провайдера или взаимодействия с его сервисами.
twitterworkos