Skip to content

v1.1.0 — Управление идентификационными данными

Choose a tag to compare

@NAGenaev NAGenaev released this 12 Jun 20:25
· 78 commits to main since this release

Управление идентификационными данными

Введён уровень идентификационных данных (Identity layer): каждый аутентифицированный пользователь получает единую сущность — независимо от метода входа (Token, LDAP, JWT, AppRole, Kubernetes).

Ключевые понятия:

  • Сущность (Entity) — канонический идентификатор пользователя или сервиса. Хранит псевдонимы, полученные от каждого метода аутентификации, и набор политик
  • Псевдоним (Alias) — пара «accessor метода аутентификации + имя на стороне этого метода» (например, auth_ldap + cn=alice,ou=users,...)
  • Автоматическое связывание — при входе через LDAP, JWT, AppRole или Kubernetes сервер ищет существующую сущность по accessor и имени пользователя. При нахождении — прикрепляет токен к ней; при отсутствии — создаёт новую сущность автоматически

Влияние на политику: к токену применяются как политики метода аутентификации (AppRole, LDAP и т. д.), так и политики сущности — без необходимости их повторного перечисления.

API

Метод Путь Описание
POST /v1/identity/entity Создать или обновить сущность
GET /v1/identity/entity/name/:name Получить сущность по имени
GET /v1/identity/entity/id/:id Получить сущность по идентификатору
DELETE /v1/identity/entity/id/:id Удалить сущность
LIST /v1/identity/entity/ Перечислить сущности

CLI

identity entity create --name=<name> --policy=<policy>...
identity entity get <name>
identity entity delete <name>
identity entity list

Состав изменений

  • pkg/identity: новый пакет — Store, Entity, Alias, EntityMetadata; BoltDB-хранилище с корзиной identity
  • core.Auth (Token, LDAP, JWT, AppRole, Kubernetes): вызов identity.Store.FindOrCreate при успешной аутентификации; прикрепление идентификатора и псевдонима к токену
  • api.handleIdentity*: 10 HTTP-обработчиков (CRUD + list)
  • 6 новых тестов идентификации успешно проходят