← Усі шаблони · Паролі та вхід
Задеплойте FusionAuth в один клік
Керування ідентифікацією та доступом клієнтів: вхід, реєстрація, єдиний вхід і MFA для ваших застосунків
Альтернатива Auth0, Okta і Amazon Cognito на вашій машині.
Що таке FusionAuth?
FusionAuth — сервер керування ідентифікацією та доступом клієнтів (CIAM): ваші веб-, мобільні та API-застосунки доручають йому вхід, реєстрацію й керування користувачами. Він підтримує OAuth 2.0, OpenID Connect і SAML 2.0, тож більшість фреймворків підключаються до нього своїми стандартними бібліотеками, а ще в нього є власні клієнтські бібліотеки для JavaScript, Python, Java, Go, PHP, .NET, Ruby та інших мов. Його готові сторінки входу впускають людей за паролем, за посиланням для входу (magic link) або через соціальний акаунт, як-от Google, Apple чи Facebook, додають двофакторну автентифікацію через застосунок-автентифікатор і оформлюються темами під ваш застосунок.
FusionAuth створює компанія FusionAuth, Inc. з Денвера, і його тариф Community безкоштовний, без обмежень на кількість користувачів; платні тарифи додають такі функції, як коди поштою та SMS, перевірка паролів на витоки, власні форми реєстрації та SCIM. Код у нього не відкритий: ви запускаєте його за ліцензією FusionAuth. Усе зібрано в одному інтерфейсі адміністратора та REST API: застосунки, тенанти для окремих пулів користувачів, ролі, групи, вебхуки, налаштування JWT і лямбди, що формують токени.
Цей шаблон запускає офіційний образ FusionAuth версії 1.69.4 разом із базою даних Postgres 18, яку «Новий проєкт» створює поруч, або однією з ваших, яку ви оберете, і шукає користувачів у Postgres, без Elasticsearch. Спершу FusionAuth запускається на порту, до якого ніхто не дістанеться, і там його адміністратора створюють з пошти й пароля, які ви вводите, тож майстер налаштування ніколи не відкритий для сторонніх. Пошту FusionAuth надсилає через Resend, SendGrid або Amazon SES — який сервіс ви оберете у вікні «Новий проєкт», а поки ви не задасте сервіс у тенанті, не надсилає зовсім.
Хостинг FusionAuth на Pethost
- Ви входите в Pethost — з ключем доступу, через GitHub або Google. Машини ще немає? Ви обираєте тариф, і посилання чекає, доки машина не буде готова.
- Вікно «Новий проєкт» відкривається на застосунку FusionAuth. Ви заповнюєте те, що він просить, і натискаєте «Створити проєкт»: Електронна пошта, Пароль адміністратора.
- Надсилання пошти необов’язкове: щоб застосунок FusionAuth надсилав листи, ви обираєте у вікні «Новий проєкт» Resend, SendGrid або Amazon SES і вставляєте те, що видає провайдер.
- Вікно «Новий проєкт» також створює для застосунку FusionAuth нову базу даних і підключає її до першого запуску застосунку: Postgres (512 MB). Або ви обираєте одну зі своїх баз Postgres: застосунок FusionAuth отримує в ній окремого користувача й окрему базу даних, яких інші застосунки там не можуть прочитати, а всі застосунки цієї бази потрапляють в один бекап і відновлюються разом.
- За хвилину-дві FusionAuth працює за власною адресою з HTTPS. Секрети створюються випадково, а дані потрапляють у щонічний бекап.
- Це проєкт як будь-який інший: ви або ваш агент можете його змінити, відкотити або відновити.
Питання про FusionAuth
FusionAuth безкоштовний?
Тариф Community у FusionAuth безкоштовний, якщо ви запускаєте його самі: без обмежень на кількість користувачів і з основними функціями — OAuth 2.0, OpenID Connect і SAML, вхід через соцмережі, MFA через застосунок-автентифікатор, теми оформлення й повний API. Платні тарифи додають коди поштою та SMS, перевірку паролів на витоки, власні форми реєстрації, SCIM і виявлення загроз. FusionAuth можна використовувати безкоштовно, але його код не відкритий.
FusionAuth чи Auth0: що обрати?
Обидва впускають користувачів через OAuth 2.0, OpenID Connect і SAML, із входом через соцмережі та MFA. Auth0 — хмарний сервіс із ціною за кількістю активних користувачів на місяць; тариф Community у FusionAuth працює там, де ви його розмістите, безкоштовно для будь-якої кількості користувачів, а його дані лишаються у вашій базі даних.
Як додати вхід у свій застосунок за допомогою FusionAuth?
Створіть застосунок в інтерфейсі адміністратора FusionAuth і додайте адресу зворотного виклику (callback) вашого застосунку як дозволений URL перенаправлення. Потім ваш застосунок надсилає користувачів на готову сторінку входу FusionAuth через бібліотеку OpenID Connect, з client ID і секретом цього застосунку, й отримує назад їхні токени.
Чи підтримує FusionAuth вхід через соцмережі та ключі доступу?
Так. Розділ «Identity Providers» уже в тарифі Community додає на сторінку входу Google, Apple, Facebook, Twitter і будь-якого провайдера OpenID Connect чи SAML 2.0. Для ключів доступу (WebAuthn) потрібен безкоштовний тариф Licensed Community, зареєстрований в особистому кабінеті на сайті FusionAuth.
Чи може FusionAuth перенести користувачів з Auth0 або Firebase?
Так. Його User Import API приймає наявні хеші паролів, тож користувачі зберігають свої паролі, а FusionAuth документує міграції з Auth0, Amazon Cognito, Firebase, Keycloak та інших систем.
Скільки пам’яті й диска потрібно FusionAuth?
FusionAuth працює на Java: у спокої близько 600–800 MB пам’яті поруч із його базою Postgres на 512 MB, більше — з багатьма користувачами й входами; база даних росте повільно, разом із користувачами та записами про їхні входи. Вікно «Новий проєкт» дає кожній базі даних застосунку стільки пам’яті, скільки радить шаблон, якщо ви це не зміните: Postgres (512 MB). На Pethost йому вистачить тарифу Starter, і поруч залишиться місце для інших застосунків.
FusionAuth: файл Docker Compose
Шаблон — це цей compose.yaml і змінні, які записуються в .env проєкту під час його створення. Pethost запускає файл так, як його написано. Машина записує туди, як застосунок входить у свої бази даних, коли підключає їх. Вікно «Новий проєкт» записує туди вибрані в ньому налаштування пошти або залишає їх порожніми, якщо застосунок не надсилає листів.
Контейнери: fusionauth (fusionauth/fusionauth-app:1.69.4).
Бази даних, кожна — окремий проєкт: Postgres (512 MB).
services:
fusionauth:
image: fusionauth/fusionauth-app:1.69.4
restart: unless-stopped
environment:
# FusionAuth reads DATABASE_URL as a JDBC URL, so it is made here from the part's parts.
DATABASE_URL: jdbc:postgresql://${DATABASE_HOST:?reload New project to link a Postgres database, or send link_databases with env_prefix DATABASE}:${DATABASE_PORT:?reload New project to link a Postgres database, or send link_databases with env_prefix DATABASE}/${DATABASE_NAME:?reload New project to link a Postgres database, or send link_databases with env_prefix DATABASE}
DATABASE_USERNAME: ${DATABASE_USER:?reload New project to link a Postgres database, or send link_databases with env_prefix DATABASE}
DATABASE_PASSWORD: ${DATABASE_PASSWORD:?reload New project to link a Postgres database, or send link_databases with env_prefix DATABASE}
# Silent mode makes the schema in the linked database, which the app's user owns, and
# applies a new release's migrations at its start; production mode never shows the
# migration screen to a visitor.
FUSIONAUTH_APP_SILENT_MODE: "true"
FUSIONAUTH_APP_RUNTIME_MODE: production
# Users are searched in Postgres, with no Elasticsearch or OpenSearch beside it.
SEARCH_TYPE: database
FUSIONAUTH_APP_MEMORY: 512M
# 20 connections at most, FusionAuth's default, within the 47 of the Postgres part.
DATABASE_MAXIMUM_POOL_SIZE: "20"
URL: ${URL}
ADMIN_EMAIL: ${ADMIN_EMAIL}
ADMIN_PASSWORD: ${ADMIN_PASSWORD}
SETUP_API_KEY: ${SETUP_API_KEY}
# The mail provider picked in New project, by STARTTLS on its port; with none, FusionAuth
# sends no mail until one is set on the tenant.
SMTP_HOST: ${SMTP_HOST}
SMTP_PORT: ${SMTP_PORT}
SMTP_USER: ${SMTP_USER}
SMTP_PASSWORD: ${SMTP_PASSWORD}
SMTP_FROM: ${SMTP_FROM}
SMTP_FROM_NAME: ${SMTP_FROM_NAME}
# A new FusionAuth shows its setup wizard to whoever opens it first, also in the seconds
# before Kickstart has run, and counts the setup as done only when Kickstart made the
# administrator. So FusionAuth runs first on port 9019, which nobody reaches, and only then on
# port 9011, the page's. On a new database, Kickstart makes the set-up's API key and the
# administrator, with a stand-in email and password, and gives the default tenant the
# project's address as its issuer; the API then gives the administrator the email and
# password of the fields, and the tenant the mail provider, since Kickstart takes a quote or
# a backslash out of what it is given. The set-up's key is deleted last: while it answers,
# the set-up is unfinished, and once it is refused and the setup wizard sends a visitor to
# sign in, FusionAuth is set up.
command:
- bash
- -c
- |
set -e
cd /usr/local/fusionauth
json() { printf '%s' "$$1" | sed -e 's/\\/\\\\/g' -e 's/"/\\"/g'; }
# The set-up's API key, and the ids of it and of the administrator, all from SETUP_API_KEY.
key=$$SETUP_API_KEY
key_id=$${key:0:8}-$${key:8:4}-$${key:12:4}-$${key:16:4}-$${key:20:12}
admin_id=$${key:32:8}-$${key:40:4}-$${key:44:4}-$${key:48:4}-$${key:52:12}
# Kickstart runs only on a FusionAuth with no API key and no user yet.
cat > /tmp/kickstart.json <<KICKSTART
{
"apiKeys": [{"id": "$$key_id", "key": "$$key", "keyManager": true, "description": "The template's set-up"}],
"requests": [
{"method": "PATCH", "url": "/api/tenant/#{FUSIONAUTH_TENANT_ID}", "body": {"tenant": {"issuer": "$$URL"}}},
{
"method": "POST",
"url": "/api/user/registration/$$admin_id",
"body": {
"user": {"email": "[email protected]", "password": "$$key"},
"registration": {"applicationId": "#{FUSIONAUTH_APPLICATION_ID}", "roles": ["admin"]}
}
}
]
}
KICKSTART
FUSIONAUTH_APP_HTTP_PORT=9019 FUSIONAUTH_APP_KICKSTART_FILE=/tmp/kickstart.json fusionauth-app/bin/start.sh &
first=$$!
stop_first() {
kill $$first
wait $$first 2> /dev/null || true
}
api() {
method=$$1
path=$$2
shift 2
curl -sS -o /tmp/api.json -w '%{http_code}' -X "$$method" -H "Authorization: $$key" \
-H 'Content-Type: application/json' "$$@" "http://127.0.0.1:9019$$path" 2> /dev/null || true
}
refused() {
echo "FusionAuth refused $$1: $$(cat /tmp/api.json)" >&2
stop_first
exit 1
}
# Silent mode migrates the database first; a database that does not answer stops the
# start after 5 minutes, and the next start tries again.
for wait in $$(seq 300); do
kill -0 $$first 2> /dev/null || { echo "FusionAuth stopped at its first start." >&2; exit 1; }
admin=$$(api GET "/api/user/$$admin_id")
[ "$$admin" = 200 ] && break
wizard=$$(curl -s -o /dev/null -w '%{http_code}' http://127.0.0.1:9019/admin/setup-wizard || true)
[ "$$admin" = 401 ] && [ "$$wizard" = 302 ] && break
sleep 1
done
if [ "$$admin" != 200 ] && [ "$$wizard" != 302 ]; then
echo "FusionAuth did not answer on its first start within 5 minutes." >&2
stop_first
exit 1
fi
if [ "$$admin" = 200 ]; then
echo "setting FusionAuth up on a port nobody reaches"
tenant=$$(grep -o '"tenantId":"[^"]*"' /tmp/api.json | head -n 1 | cut -d '"' -f 4)
if [ "$${#ADMIN_PASSWORD}" -lt 8 ]; then
echo "The admin password has fewer than 8 characters, which FusionAuth refuses: give one of 8 or more in ADMIN_PASSWORD of the project's .env, then deploy again." >&2
stop_first
exit 1
fi
[ "$$(api PATCH "/api/user/$$admin_id" \
-d "{\"user\": {\"email\": \"$$(json "$$ADMIN_EMAIL")\", \"password\": \"$$(json "$$ADMIN_PASSWORD")\"}}")" = 200 ] \
|| refused "the administrator's email and password"
if [ -n "$$SMTP_HOST" ]; then
[ "$$(api PATCH "/api/tenant/$$tenant" -d "{\"tenant\": {\"emailConfiguration\": {\"host\": \"$$(json "$$SMTP_HOST")\",
\"port\": $$SMTP_PORT, \"security\": \"TLS\", \"username\": \"$$(json "$$SMTP_USER")\", \"password\": \"$$(json "$$SMTP_PASSWORD")\",
\"defaultFromEmail\": \"$$(json "$$SMTP_FROM")\", \"defaultFromName\": \"$$(json "$$SMTP_FROM_NAME")\"}}}")" = 200 ] \
|| refused "the mail provider"
fi
# The set-up's API key can do anything, and nothing needs it any more.
[ "$$(api DELETE "/api/api-key/$$key_id")" = 200 ] || refused "to delete the set-up's API key"
echo "FusionAuth is set up, with the administrator $$ADMIN_EMAIL"
fi
stop_first
rm /tmp/kickstart.json
exec fusionauth-app/bin/start.sh
healthcheck:
test: ["CMD", "curl", "-fsS", "-o", "/dev/null", "http://127.0.0.1:9011/api/status"]
interval: 10s
timeout: 5s
retries: 30
start_period: 300s
Ще в категорії «Паролі та вхід»
- VaultwardenСервер менеджера паролів для застосунків Bitwarden
- AuthorizerВхід у ваші власні застосунки, з OAuth 2 та OpenID Connect
- Password PusherПаролі й секрети за посиланнями, що спливають
- authentikПровайдер ідентифікації для єдиного входу у ваші застосунки: OpenID Connect, SAML, LDAP, MFA і ключі доступу
- KeycloakКерування ідентифікацією та доступом із відкритим кодом: єдиний вхід для ваших застосунків з OpenID Connect і SAML