# Переход на Keycloak SSO (Nubes) ## Как сейчас - `DEV_MODE=true` — mock-аутентификация - Любой clientId можно ввести вручную на `/login` - JWT подписывается локальным RSA-ключом ## Что нужно от DevOps (v0.5.13) ### 1. Параметры для .env (на ВМ) ```bash # ── Отключить mock-режим (убрать DEV_MODE или поставить false) ── # DEV_MODE=true # ── Keycloak realm (прямой или через API Gateway) ── KC_BASE_URL=https://keycloak.nubes.ru/realms/cloud # ИЛИ через API Gateway: # KC_BASE_URL= # ── OAuth client (зарегистрированное приложение) ── KC_CLIENT_ID= KC_CLIENT_SECRET=<секрет клиента> # ── Публичный URL приложения (для редиректа из Keycloak) ── APP_URL=https://<ваш-домен> # ── JWKS URL для верификации токенов (если не через KC_BASE_URL) ── # JWKS_URL=https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/certs ``` ### 2. Уточнить | Вопрос | Описание | |---|---| | **API Gateway?** | Токен получать напрямую из Keycloak или через API Gateway? | | **ClientID в токене** | Какой claim содержит ID компании? Сейчас ждём `ClientID` или `client_id`. | | **Admin-роль** | Как определяется admin? `clientId === WZ01112` достаточно или нужен отдельный claim? | | **Redirect URI** | Какой зарегистрирован? `https://<домен>/callback`? | | **Несколько компаний** | `clientid` в токене приходит как одна строка или через запятую? | ### 3. Что сделано в коде (готово) | Компонент | Файл | |---|---| | JWKS-загрузка + кеширование | `src/auth.js` | | Верификация RS256 JWT | `src/auth.js` | | `buildAuthUrl()` — редирект на Keycloak | `src/auth.js` | | `exchangeCode()` — обмен code→token | `src/auth.js` | | `buildLogoutUrl()` — logout | `src/auth.js` | | OIDC-роуты /login, /callback, /logout | `src/routes/oidc.js` | | `userFromPayload()` — парсинг claims | `src/auth.js` | ### 4. Порядок включения ```bash # 1. Настроить .env на ВМ (параметры выше) # 2. Перезапустить pm2 restart ipwhitelist --update-env # 3. Проверить что включился OIDC-режим pm2 logs ipwhitelist --lines 3 # Должно быть: "[auth] OIDC — Keycloak" # Если видно "[auth] MOCK" — значит KC_CLIENT_ID не задан # 4. Открыть https://<домен>/login # Должен редиректить на Keycloak вместо формы входа ```