Files
IPWhiteList/research/auth-flow.md
T

3.0 KiB
Raw Blame History

Результаты анализа HAR — nubes_login.har

Дата: 2026-05-30
Источник: nubes_login.har — запись входа в платформу Nubes
Пользователь: tazet@narod.ru (Наиль Тазетдинов)


Схема авторизации

Браузер → lk-api-gateway.ngcloud.ru/api/v1/iam/auth/login
       → keycloak.nubes.ru/realms/cloud/login-actions/authenticate
       → auth-api (выпускает JWT)

Платформа использует собственный auth-api как надстройку над Keycloak. Токен подписан auth-api, не Keycloak.


Реальные claim-имена в JWT

{
  "iss": "auth-api",
  "sub": "0199e325-1cdf-7cda-9319-e5302a85e291",
  "ClientID": "WZ01325",
  "company_id": "3e64aac6-dcfc-4082-88dc-da19c86555a5",
  "company_name": "Тест",
  "email": "tazet@narod.ru",
  "login": "tazet@narod.ru",
  "firstname": "Наиль",
  "middlename": "Фарисович Тестовая учетка",
  "lastname": "Тазетдинов",
  "token_type": "access",
  "realm_access": { "roles": null },
  "resource_access": { "account": { "roles": null } },
  "groups": null
}

Выводы для IP WhiteList

Точно известно

Что Значение
claim для clientId ClientID (строка, например "WZ01325")
claim для email email
claim для company_id company_id (UUID-строка)
claim для company_name company_name
Проверка подписи JWKS от auth-api, НЕ keycloak.nubes.ru
Multi-company В этом токене — одна компания (строка, не массив)

Ещё не известно

Вопрос Почему важно
Admin-признак roles=null, groups=null — нужен пример токена админа
JWKS URL auth-api Где брать публичный ключ для проверки подписи?
Multi-company формат Будет ли ClientID массивом для пользователей с несколькими компаниями?
Как токен доставляется до сервиса Authorization: Bearer? Или через ingress-заголовки?

Как это использовать сейчас

В server.js middleware уже близок к правильному:

// Текущий код (почти правильный):
req.user = {
  email: payload.email,
  clientId: payload.ClientID,        // ← подтверждено HAR
  companyName: payload.company_name, // ← подтверждено HAR
};

Нужно поправить:

  • payload.company_id → сохранять отдельно (UUID, пригодится)
  • Добавить TODO про admin-роль
  • Добавить TODO про JWKS проверку (сейчас base64 без подписи)