- src/routes/oidc.js: /login, /callback, /logout Активны ТОЛЬКО при KC_CLIENT_ID+KC_CLIENT_SECRET Сейчас (mock) — пустой router, запросы уходят в UI - server.js: подключены OIDC-роуты - docs/deploy-keycloak.md: что нужно от DevOps для включения
69 lines
3.0 KiB
Markdown
69 lines
3.0 KiB
Markdown
# Переход на 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=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. Порядок включения
|
|
|
|
```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://white.nodejsk8s.dev.nubes.ru/login
|
|
# Должен редиректить на Keycloak вместо формы входа
|
|
```
|