Files
ipwhitelist-app/docs/deploy-keycloak.md
T

69 lines
2.9 KiB
Markdown

# Переход на Keycloak SSO (Nubes)
## Как сейчас
- `DEV_MODE=true` — mock-аутентификация
- Любой clientId можно ввести вручную на `/login`
- JWT подписывается локальным RSA-ключом
## Что нужно от DevOps (v0.5.23)
### 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=<url API Gateway>
# ── 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`? |
| **Несколько компаний** | Компании через IAM API (GET /auth/user → profiles[]) |
### 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 вместо формы входа
```