- src/routes/oidc.js: /login, /callback, /logout Активны ТОЛЬКО при KC_CLIENT_ID+KC_CLIENT_SECRET Сейчас (mock) — пустой router, запросы уходят в UI - server.js: подключены OIDC-роуты - docs/deploy-keycloak.md: что нужно от DevOps для включения
3.0 KiB
3.0 KiB
Переход на Keycloak SSO (Nubes)
Как сейчас
DEV_MODE=true— mock-аутентификация- Любой clientId можно ввести вручную на
/login - JWT подписывается локальным RSA-ключом
Что нужно от DevOps (v0.5.13)
1. Параметры для .env (на ВМ)
# ── Отключить 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=https://lk-api-gateway-test.ngcloud.ru/api/v1/iam/auth
# ── OAuth client (зарегистрированное приложение) ──
KC_CLIENT_ID=deck-test.ngcloud.ru
KC_CLIENT_SECRET=...
# ── Публичный URL приложения (для редиректа из Keycloak) ──
APP_URL=https://white.nodejsk8s.dev.nubes.ru
# ── JWKS URL для верификации токенов (если не через KC_BASE_URL) ──
# JWKS_URL=https://keycloak.nubes.ru/realms/cloud/protocol/openid-connect/certs
2. Уточнить
| Вопрос | Описание |
|---|---|
| API Gateway? | Токен получать напрямую из Keycloak или через lk-api-gateway-test.ngcloud.ru? |
| ClientID в токене | Какой claim содержит ID компании? Сейчас ждём ClientID или client_id. |
| Admin-роль | Как определяется admin? clientId === WZ01112 достаточно или нужен отдельный claim? |
| Redirect URI | Какой зарегистрирован? https://white.nodejsk8s.dev.nubes.ru/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. Порядок включения
# 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://white.nodejsk8s.dev.nubes.ru/login
# Должен редиректить на Keycloak вместо формы входа