81 lines
3.4 KiB
Markdown
81 lines
3.4 KiB
Markdown
# Вопросы для уточнения — IP WhiteList
|
||
|
||
> Дата: 2026-05-30
|
||
> Кому: команда Keycloak / Nubes
|
||
> Статус: ждём ответов
|
||
|
||
---
|
||
|
||
## 1. Admin-роль: «отдельный чек-бокс»
|
||
|
||
**ТЗ:** Администратор = `clientId = WZ01112` + отдельный чек-бокс.
|
||
|
||
**Вопросы:**
|
||
- В каком claim приходит этот чек-бокс? (realm_role, client_role, group, attribute?)
|
||
- Как точно называется claim? Примеры возможных значений:
|
||
- `"roles": ["whitelist-admin"]`
|
||
- `"resource_access.whitelist.roles": ["admin"]`
|
||
- `"is_admin": true`
|
||
- Нужна ли поддержка нескольких админов (не только WZ01112)?
|
||
|
||
**Как обойти:** захардкодить `clientId === 'WZ01112'` как признак админа, добавить `TODO` с ссылкой на этот файл.
|
||
|
||
---
|
||
|
||
## 2. Multi-company: формат claims
|
||
|
||
**ТЗ:** Пользователь может принадлежать нескольким компаниям, в UI — переключатель.
|
||
|
||
**Вопросы:**
|
||
- `clientID` в токене — это строка или массив строк?
|
||
- Если массив — как называется claim? (`clientIDs`, `groups`, что-то ещё?)
|
||
- Есть ли claim с названием компании (для отображения в переключателе)?
|
||
- Пример реального payload токена (без секретов) для пользователя с 2+ компаниями.
|
||
|
||
**Как обойти:** всегда считать `clientId` строкой (один клиент), переключатель не делать, добавить `TODO`.
|
||
|
||
---
|
||
|
||
## 3. IP-ограничение /export
|
||
|
||
**ТЗ:** Endpoint экспорта «на старте может работать без авторизации (по сетевому ограничению)».
|
||
|
||
**Вопросы:**
|
||
- Ограничение делаем в приложении или на уровне ingress (nginx/traefik)?
|
||
- Если в приложении — где взять список разрешённых IP? (env var, файл, БД?)
|
||
- Если ingress — кто настраивает?
|
||
|
||
**Как обойти:** оставить `/export` открытым, добавить `TODO`.
|
||
|
||
---
|
||
|
||
## 4. Email пользователя
|
||
|
||
**ТЗ:** `email` — идентификация пользователя для аудита.
|
||
|
||
**Вопросы:**
|
||
- Как называется claim с email? (`email`, `preferred_username`, что-то ещё?)
|
||
- Всегда ли он присутствует в токене?
|
||
|
||
**Как обойти:** брать `payload.email` с fallback на `payload.sub`, добавить `TODO`.
|
||
|
||
---
|
||
|
||
## 5. DEV_MODE
|
||
|
||
**Вопросы:**
|
||
- Нужен ли dev-режим на платформе Nubes (не локально)?
|
||
- Или всегда только реальный Keycloak?
|
||
|
||
**Как обойти:** оставить `DEV_MODE=true` с проверкой что в production падает при включении.
|
||
|
||
---
|
||
|
||
## Условные обозначения в коде
|
||
|
||
```
|
||
// TODO(Keycloak): уточнить формат claim — см. docs/questions.md#1
|
||
// FIXME(Keycloak): временно, заменить после ответа команды
|
||
// HACK(DEV_MODE): заглушка, убрать перед продакшеном
|
||
```
|