Files
ipwhitelist-app/docs/deploy-keycloak.md
T
naeel 2194c1650f cleanup: убрать IP, реальные URL, креды из публичных файлов
- AGENT-GUIDE.md: убран IP ВМ, HTTP→HTTPS
- copilot-instructions.md: Files/token.txt→.env.example
- keycloak-auth-reference.md: убраны реальные client_id, URL gateway, email
- deploy-keycloak.md: реальные параметры заменены на шаблоны
- .env.example: русские значения→шаблоны
- README.md: порт 3000, multi-company пример под mock
2026-06-03 13:10:48 +03:00

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=<ID клиента из Keycloak>
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. Порядок включения

# 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 вместо формы входа