Files
ZITADEL/README.md
2026-05-01 19:58:22 +03:00

3.0 KiB
Raw Blame History

ZITADEL POC

POC с кастомными формами login и register, где ZITADEL используется только как backend IdP.

  • /login — кастомная форма входа
  • /register — кастомная форма регистрации
  • /me — JSON с claims из JWT, выданного ZITADEL
  • /dashboard — UI, который показывает данные из /me

Приложение не использует hosted login UI ZITADEL для пользовательского входа:

  • не используется /ui/login/loginname
  • не используется /ui/login/password
  • не парсится hosted HTML, CSRF или authRequestID старого hosted login
  • браузер не уходит на hosted SSO-страницы ZITADEL при входе через http://localhost:3001/login

Пароли и учетные записи хранятся в ZITADEL, не в нашем приложении.

Запуск

docker compose down -v
docker compose up --build

Первый запуск ZITADEL может занять несколько минут.

Адреса

Frontend:

http://localhost:3001

ZITADEL Console:

http://zitadel.localhost:8081

Как работает вход

  1. Регистрация создает пользователя в ZITADEL через API:
POST /v2/users/human
  1. Вход проверяет email/password через официальный Session API ZITADEL:
POST /v2/sessions
PATCH /v2/sessions/{sessionId}
  1. После успешной аутентификации backend завершает OIDC auth request и получает настоящий id_token / access_token от ZITADEL.

  2. /me валидирует и декодирует id_token, затем возвращает только claims:

  • sub
  • email
  • name
  • preferred_username
  • iss
  • aud
  • iat
  • exp
  1. /dashboard показывает именно JSON из /me, а не raw JWT.

Хранение токенов

  • токены не хранятся в localStorage
  • токены не хранятся в sessionStorage
  • используется HttpOnly cookie
  • используется SameSite=Lax
  • в production cookie должна быть Secure=true
  • в local dev Secure=false

Password Policy

Локальная валидация и ZITADEL policy выровнены под тот же набор правил, что и в проекте Authentik:

  • минимум 8 символов
  • хотя бы одна заглавная буква
  • хотя бы одна строчная буква
  • хотя бы одна цифра

Logout

POST /logout

Этот endpoint очищает cookie приложения и закрывает ZITADEL session, если она есть.

Out Of Scope

В рамках этого POC не реализованы:

  • sessions UI
  • consent UI
  • MFA devices UI
  • connected services
  • app passwords