Единый вход: 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 и сценарии оценки при подготовке не запускались. Тесты и публикация учебных приложений не выполнялись.
Оглавление
- Идентичность, полномочия и проект «Пропуск» — Разделить приложение, провайдера идентичности и браузер.
- Локальный Keycloak и учебный realm — Создать декларативный realm, пользователей и клиент приложения.
- OIDC Discovery и проверка провайдера — Получить конфигурацию строго заданного издателя.
- Начало входа: state, nonce и PKCE — Связать попытку входа с браузером и создать одноразовые параметры.
- Обмен кода и проверенный профиль — Обменять code с verifier и получить подтверждённые claims.
- Серверная сессия и cookie браузера — Заменить временную попытку входа новой локальной сессией.
- Роли пользователя и доступ к операциям — Передавать роли в проверенных claims и защищать серверную операцию.
- Изменение данных и защита от CSRF — Проверять метод, Origin и токен перед сохранением заявки.
- Два приложения и единый вход — Добавить второй клиент с отдельными redirect URI и cookie.
- Локальный выход и завершение SSO — Разделить удаление локальной сессии и RP-initiated logout.
- Обновление токенов и срок полномочий — Обновить токены по серверному сроку и сохранить границу отзыва.
- Регистрация passkey у провайдера — Включить passwordless-политику и направить пользователя на регистрацию.
- Восстановление доступа и запасной ключ — Описать второй passkey, резервный пароль и отзыв утраченного ключа.
- Эксплуатационный контракт единого входа — Зафиксировать HTTPS, внешнюю сессию, конфигурацию и журнал событий.
Продолжение маршрута
AI-помощник по документам показывает пример будущего защищённого сервиса. Другие серии новой партии собраны в маршрутах веб-приложений.