Перейти к содержанию

Единый вход: OAuth, OIDC и passkeys

Построим «Пропуск» — локальное приложение с входом через Keycloak. Проследим OIDC Discovery, authorization code и PKCE, callback, серверную сессию и роли. Добавим защищённую редакторскую заявку, второе приложение, разные виды выхода и обновление токенов. Завершим регистрацией passkey у провайдера, сценарием восстановления доступа и границами реального выпуска.

Закреплены Node.js 22.14.0, openid-client 6.8.8, Keycloak 26.5.2. Это выбранный учебный профиль, а не утверждение о самых новых версиях. Перед реальной публикацией нужны актуальные исправления, HTTPS и отдельная эксплуатационная подготовка. В архиве нет Docker-образов, npm-зависимостей, действующих аккаунтов или токенов.

Предполагается понимание HTTP, cookies, JavaScript, асинхронных функций и локальных контейнеров. Учебные пользователи вымышлены. Каждый снимок содержит полный realm; новый импорт не обновляет уже существующий realm. README объясняет отдельные compose-проекты и ручной перенос изменений. Passkeys требуют поддерживаемого браузера, ОС и аутентификатора; восстановление в курсе использует второй ключ и заранее оставленный локальный пароль, без SMTP и recovery codes.

В серии 14 уроков. Каждая lesson-NN в архиве исходников является самостоятельным состоянием. Команды, серверы, модели, вход, WebAuthn и сценарии оценки при подготовке не запускались. Тесты и публикация учебных приложений не выполнялись.

Оглавление

  1. Идентичность, полномочия и проект «Пропуск» — Разделить приложение, провайдера идентичности и браузер.
  2. Локальный Keycloak и учебный realm — Создать декларативный realm, пользователей и клиент приложения.
  3. OIDC Discovery и проверка провайдера — Получить конфигурацию строго заданного издателя.
  4. Начало входа: state, nonce и PKCE — Связать попытку входа с браузером и создать одноразовые параметры.
  5. Обмен кода и проверенный профиль — Обменять code с verifier и получить подтверждённые claims.
  6. Серверная сессия и cookie браузера — Заменить временную попытку входа новой локальной сессией.
  7. Роли пользователя и доступ к операциям — Передавать роли в проверенных claims и защищать серверную операцию.
  8. Изменение данных и защита от CSRF — Проверять метод, Origin и токен перед сохранением заявки.
  9. Два приложения и единый вход — Добавить второй клиент с отдельными redirect URI и cookie.
  10. Локальный выход и завершение SSO — Разделить удаление локальной сессии и RP-initiated logout.
  11. Обновление токенов и срок полномочий — Обновить токены по серверному сроку и сохранить границу отзыва.
  12. Регистрация passkey у провайдера — Включить passwordless-политику и направить пользователя на регистрацию.
  13. Восстановление доступа и запасной ключ — Описать второй passkey, резервный пароль и отзыв утраченного ключа.
  14. Эксплуатационный контракт единого входа — Зафиксировать HTTPS, внешнюю сессию, конфигурацию и журнал событий.

Продолжение маршрута

AI-помощник по документам показывает пример будущего защищённого сервиса. Другие серии новой партии собраны в маршрутах веб-приложений.