BMC IO DocsBMC IO Docs
IO v6
IO v7
Notes
Docs
IO v6
IO v7
Notes
Docs
  • IO Framework v7

    • О фреймворке
    • Что изменилось в 7 версии
    • IO7 Framework vs Laravel 13 — Сравнение
    • Структура
    • Варианты проектов
    • Доступ к участкам проекта
    • Разворачивание нового проекта
    • Установка проекта
    • Запуск локальной разработки
  • API

    • Обзор API
    • IOCore::call() и IOCore::callAction()
    • Создание API
  • CLI

    • Обзор CLI
    • iocli
    • Кастомные CLI команды
  • Работа с базами данных

    • Обзор работы с базами данных
    • Cron / Планировщик задач (Schedule)
    • Фабрики
    • Миграции
    • Сидеры
    • Query Builder
    • Подключение MinIO
    • Подключение MongoDB
    • Подключение MySQL
    • Подключение PostgreSQL
    • Подключение ProxySQL
    • Подключение RabbitMQ
    • Подключение Redis
  • Логирование

    • Обзор логирования
    • IOEvent - Логирование событий
    • Pinba (PinbaManager) - Профилировщик
  • Модели

    • Обзор моделей
    • CRUD операции
    • Связи моделей
  • Очереди

    • Обзор очередей
    • RabbitMQ
  • Маршруты

    • Обзор маршрутов
    • Определение маршрутов
    • Middleware
  • Сессии

    • Обзор сессий
    • Кроссдоменная SSO
    • JWT авторизация
    • Социальная авторизация
    • OAuth2
    • Keycloak
  • Twig

    • Обзор Twig
    • Формы (FormBuilder)
    • Twig функции
  • Тестирование

    • Обзор тестирования
    • Unit тесты
  • Backend

    • Настройки проекта Conf.php
    • Настройки модуля Module.php
    • Настройки composer
    • Функции фреймворка
    • Вспомогательные функции (Helpers)
    • Глобальные переменные
    • Константы фреймворка
    • Event класс
    • Core класс
    • Route и работа с ними
    • Request и работа с ними
    • Middleware и работа с ними
    • Class и работа с ними
    • Api model и работа с ними
    • Template и работа с ними
    • Мультиязычность и словарь фраз
    • Bin скрипты и работа с ними
    • Cron скрипты и работа с ними
    • $ioSession и работа с сессией
    • $ioHash и работа с кешем
    • $ioXCache и работа с кешем
    • $iodb и работа с базой данных
    • Миграции
  • Frontend

    • Twig шаблонизатор и работа с ним
    • Twig функции
    • Twig фильтры
    • Twig контекст
    • Настройка NPM
    • Сборка Frontend составляющей
    • Обращение к Api через JS
    • Хранилище (store)
    • Навигация в хосте
    • Навигация в микрофронтенде
    • Параметры микрофронтенда
    • Проверка полномочий
  • Tailux UI Компоненты

    • Базовый UI

      • AvatarDot
      • Avatar
      • Badge
      • Button
      • Card
      • ConfirmModal
      • Divider
      • Highlight
      • Tag
    • Загрузка

      • Circlebar
      • Progress
      • Skeleton
      • Spinner
    • Навигация

      • Accordion
      • AccordionButton
      • AccordionHeader
      • AccordionItem
      • AccordionPanel
      • AccordionProvider
      • Pagination
      • PaginationControl
      • PaginationItems
      • PaginationDots
      • PaginationFirst
      • PaginationLast
      • PaginationNext
      • PaginationPrevious
    • Отображение данных

      • Box
      • Collapse
      • ContextualHelp
      • ScrollShadow
      • Timeline
      • TimelineItem
    • Элементы таблиц

      • Table
      • CollapsibleSearch
      • ColumnFilter
      • CopyableCell
      • DateFilter
      • FacetedFilter
      • FilterSelector
      • PaginationSection
      • RadioFilter
      • RangeFilter
      • ResponsiveFilter
      • RoleFilter
      • SelectedRowsActions
      • TableColumnVisibility
      • TableSettings
      • TableSortIcon
    • Элементы форм

      • Checkbox
      • Combobox
      • DatePicker
      • Filepond
      • Input
      • Listbox
      • Radio
      • Range
      • Select
      • StyledSwitch
      • Swap
      • SwapOn
      • SwapOff
      • Switch
      • Textarea
      • TextEditor
      • Upload

Обзор сессий — IO7 Framework

Внимание

Данная статья документации написана нейросетью. Возможны некоторые расхождения и неточность информации!

  • Обзор
  • Архитектура
  • Зависимости
  • Конфигурация (.env)
  • Схема авторизации
  • Быстрый старт
    • Создание сессии
    • Создание JWT токена
    • OAuth2 авторизация
    • Социальная авторизация
    • Кроссдоменная SSO
    • Keycloak
  • См. также

Обзор

Модуль сессий IO7 предоставляет комплексные инструменты для управления авторизацией и сессиями пользователей. Включает JWT-токены, OAuth2, социальную авторизацию, кроссдоменную SSO и интеграцию с Keycloak.

Требования: PHP ^8.2, Illuminate (Laravel 13)

Архитектура

IO\Auth\TokenManager          — Единый менеджер токенов (HS256 + RS256)
IO\Auth\OAuth2Server          — OAuth2 сервер (authorization code flow)
IO\Auth\OAuth2Client          — OAuth2 клиент (для подключения к SSO)
IO\Auth\SocialiteManager      — Социальная авторизация (Google, GitHub, Facebook, Yandex, VK)
IO\Auth\CrossDomainSSO        — Кроссдоменная SSO (обмен токенами между доменами)
IO\Auth\KeycloakManager       — Интеграция с Keycloak (egov, aitu)
IO\Session                    — Управление сессиями пользователей

Зависимости

{
    "firebase/php-jwt": "~6.10.0",
    "laravel/socialite": "^5.0",
    "league/oauth2-server": "^8.0",
    "guzzlehttp/guzzle": "^7.0"
}

Конфигурация (.env)

# JWT
JWT_COOKIE=io7_token
JWT_PUBLIC_KEY=path/to/public.pem
JWT_PRIVATE_KEY=path/to/private.pem
JWT_LOGIN_SALSA=secret_salt

# OAuth2
OAUTH2_CLIENT_ID=your_client_id
OAUTH2_CLIENT_SECRET=your_client_secret
OAUTH2_AUTH_URL=https://sso.example.com/authorize
OAUTH2_TOKEN_URL=https://sso.example.com/token

# Socialite
GOOGLE_CLIENT_ID=your_google_client_id
GOOGLE_CLIENT_SECRET=your_google_client_secret
GOOGLE_REDIRECT_URI=https://example.com/auth/google/callback

# Keycloak
KEYCLOAK_BASE_URL=https://auth.example.com
KEYCLOAK_REALM=my-realm
KEYCLOAK_CLIENT_ID=my-client
KEYCLOAK_CLIENT_SECRET=my-secret

# Cross-Domain SSO
SSO_BASE_URL=https://sso.example.com
SSO_SECRET=your-sso-secret

Схема авторизации

Пользователь → Cookie (JWT) → Session::create() → JWTToken::parse()
                                                       ↓
                                              TokenManager::validate()
                                                       ↓
                                              Session->isAuth() = true

Быстрый старт

Создание сессии

$session = \IO\Session::create();

if ($session->isAuth()) {
    $userId = $session->getUserID();
    $login = $session->getUserLogin();
}

Создание JWT токена

$token = new \IO\JWTToken();
$token->setUserData([
    'id' => 123,
    'login' => 'john_doe',
    'sname' => 'Doe',
    'fname' => 'John',
    'pol' => 1,
]);
$token->session = 'session_id';
$token->expired = time() + 3600;

$jwtString = $token->encode(file_get_contents('private.pem'));

OAuth2 авторизация

$client = new \IO\Auth\OAuth2Client(
    'client_id',
    'client_secret',
    'https://sso.example.com/authorize',
    'https://sso.example.com/token',
    'https://sso.example.com/userinfo'
);

$url = $client->getAuthorizationUrl('https://myapp.example.com/callback', ['openid', 'profile']);
header('Location: ' . $url);

Социальная авторизация

$socialite = \IO\Auth\SocialiteManager::getInstance();
$socialite->init([
    'google' => [
        'client_id' => getenv('GOOGLE_CLIENT_ID'),
        'client_secret' => getenv('GOOGLE_CLIENT_SECRET'),
        'redirect' => 'https://example.com/auth/google/callback',
    ],
]);

$redirectUrl = $socialite->redirect('google');
header('Location: ' . $redirectUrl);

Кроссдоменная SSO

$sso = \IO\Auth\CrossDomainSSO::init([
    'sso_base_url' => 'https://sso.example.com',
    'sso_secret' => 'your-secret-key',
]);

$token = $sso->getCrossDomainToken('user-123', ['role' => 'admin']);
$validated = $sso->validateCrossDomainToken($token, 'example.com');

Keycloak

$keycloak = \IO\Auth\KeycloakManager::init([
    'base_url' => 'https://auth.example.com',
    'realm' => 'my-realm',
    'client_id' => 'my-client',
    'client_secret' => 'my-secret',
]);

$authUrl = $keycloak->getAuthorizationUrl('https://example.com/callback', ['openid', 'email']);

См. также

  • JWT токены
  • OAuth2
  • Социальная авторизация
  • Кроссдоменная SSO
  • Keycloak
Next
Кроссдоменная SSO