Skip to content

Идентификация ​

Материал проходит ревью.

НовичокФундамент ~38 мин

Границы темы ​

Scope: как система различает субъекты в своём контексте, когда требуется identity proofing, как создаётся account и как identity меняется со временем.

Не рассматриваем: алгоритмы OCR, face matching, конкретный KYC vendor и детали authentication protocols. Установить identity и доказать контроль authenticator при входе — разные процессы.

Что нужно знать заранее ​

Нужно понимать, что привилегии выдаются identity, а не строке из request body. «Принцип наименьших привилегий» задаёт требования к будущим правам account.

Результаты обучения ​

После статьи читатель сможет:

  1. отделить identifier от набора attributes и реального человека;
  2. определить, нужен ли identity proofing конкретной операции;
  3. проследить resolution, validation, verification и enrollment;
  4. выбрать стабильный внутренний identifier;
  5. спроектировать изменения и закрытие account без потери referential integrity.

Основная модель ​

Идентификация отвечает на вопрос: какую identity система считает отдельным субъектом в данном контексте? Это ещё не доказательство, что текущий actor контролирует эту identity.

Диаграмма

NIST SP 800-63-4 разделяет identity proofing, enrollment, authentication и federation. Успешный proofing приводит к subscriber account; authenticator затем привязывается к account и используется в другом процессе — authentication.

Основные термины ​

ТерминРабочее определениеПример
IdentifierЗначение, однозначно связанное с entity в заданном контекстеusr_01J... внутри сервиса
AttributeХарактеристика identityEmail, возрастная категория, tenant membership
Claimed identityЕщё не проверенное заявление субъекта о себе«Я владелец account X»
Identity evidenceДанные или документ в поддержку claimed identityДокумент, подписанное цифровое evidence
ResolutionВыделение одного субъекта среди обслуживаемой популяцииНайти, что applicant не является duplicate
ValidationПроверка подлинности, точности и допустимости evidence/attributesПодтвердить issuing source и срок действия
VerificationПроверка, что applicant является владельцем evidenceСопоставление с защищённой процедурой
EnrollmentСоздание subscriber account и binding authenticatorЗарегистрировать passkey после proofing

Не каждому сервису нужен proofing реального человека ​

Степень identification следует из риска операции.

Сервис или операцияДостаточная identityПочему
Читать публичную документациюAnonymous sessionНет персонального права или существенного риска
Сохранить настройки темыPseudonymous accountНужна continuity, но не паспортное имя
Работать в корпоративном tenantWorkforce identity от доверенного IdPВажны employment и membership attributes
Получить регулируемую финансовую услугуIdentity с требуемым assuranceОшибка связывания создаёт финансовый и regulatory impact
Восстановить критичный accountРанее установленные recovery bindingsНовый proofing может потребоваться по risk policy

End-to-end сценарий ​

Рассмотрим B2B-сервис, где приглашённый сотрудник получает доступ к tenant.

Диаграмма

Здесь есть несколько identifiers:

  • email используется как адрес доставки и заявленный matching attribute;
  • invitation ID однозначно обозначает приглашение;
  • IdP subject ID стабильно обозначает identity у provider;
  • внутренний user ID обозначает account внутри backend;
  • tenant membership — отдельная связь, а не свойство email.

Что происходит под капотом ​

Внутренний identifier ​

Хороший primary identifier:

  • стабилен при смене имени, email и login method;
  • уникален в явно заданном namespace;
  • не переиспользуется для другого субъекта;
  • не содержит лишних PII;
  • не даёт внешнему клиенту права только потому, что его можно угадать.

UUID/ULID может решить uniqueness и opacity, но authorization всё равно обязана проверять resource и tenant.

External identity binding ​

Не связывайте federation account только по email. Практичная связь содержит:

text
issuer + subject -> internal_user_id

subject уникален в namespace конкретного issuer. Одинаковая строка subject от другого issuer не обязана обозначать того же человека.

Account не равен человеку ​

Один человек может иметь несколько accounts, а service account вообще не является человеком. Модель должна явно отвечать:

  • допускаются ли несколько accounts на субъекта;
  • можно ли связать identities разных providers;
  • кто подтверждает merge и как его откатить;
  • что происходит с history после закрытия account;
  • какие records обязаны сохраняться по бизнес- или legal policy.

Минимальный воспроизводимый пример ​

Спроектируйте identity record без использования email как primary key:

yaml
user_id: usr_01K0Y6M8N4
status: active
display_name: Анна
contacts:
  - type: email
    value: anna@example.com
    verified_at: 2026-07-31T10:00:00Z
external_identities:
  - issuer: https://idp.example.com
    subject: 00u7abc123
authenticators:
  - id: authn_01K0Y7
    type: passkey
    added_at: 2026-07-31T10:03:00Z
memberships:
  - tenant_id: tenant_42
    status: active
retention:
  contact_delete_after: null

Ожидаемый результат ​

  • Смена email не меняет user_id и ссылки заказов.
  • Federation binding использует пару issuer/subject.
  • Tenant membership можно отозвать, не удаляя всю identity.
  • Authenticator имеет собственный lifecycle.
  • PII отделены от стабильного ключа и могут иметь retention policy.

Проверки жизненного цикла ​

СобытиеОжидаемое поведение
Пользователь меняет emailНовый контакт подтверждается; user_id неизменен
IdP повторно выдаёт тот же email другому subjectАвтоматического merge нет
Удалено tenant membershipНет доступа к tenant, но account может существовать
Потерян authenticatorRecovery не меняет identity без отдельного основания
Account закрытLogin запрещён; retention и anonymization выполняются по policy

Enumeration и privacy ​

Identification endpoints часто раскрывают существование account:

text
"Пользователь найден" vs "Такого email нет"

Для recovery и регистрации выбирайте response по threat model:

  • одинаковая внешняя формулировка и близкий timing снижают enumeration;
  • внутренний audit всё равно различает причины;
  • rate limit ограничивает массовый перебор;
  • support flow не должен раскрывать attributes до достаточной проверки;
  • masking не превращает PII в нечувствительные данные.

Полностью одинаковый timing трудно гарантировать, поэтому защита должна быть эшелонированной, а не опираться на одну строку ответа.

Trade-offs ​

РешениеВыигрышЦена или риск
Pseudonymous accountМеньше PII и frictionНиже уверенность в real-world identity
Строгий proofingВыше identity assuranceОшибки отказа, стоимость, accessibility и privacy impact
Email как login aliasУдобно пользователюИзменяемость, enumeration, account recovery risk
Несколько external identitiesResilience и удобствоРиск ошибочного linking/merge
Stable opaque IDНезависимость от attributesНужны отдельные индексы поиска и mapping

Failure modes и типичные ошибки ​

  1. Email как primary key. Смена контакта ломает связи и audit.
  2. Identification равна authentication. Найденный account не доказывает контроль actor над authenticator.
  3. Proofing везде. Сервис собирает sensitive evidence без необходимости.
  4. Автоматический merge по email. Разные issuers и повторное использование адреса связывают чужие accounts.
  5. Identifiers как authorization. Непредсказуемый ID не заменяет permission check.
  6. Нет lifecycle. Rename, duplicate, merge, recovery и deletion решаются вручную и непоследовательно.
  7. Account deletion стирает audit без модели. Referential и regulatory требования конфликтуют с privacy, если не спроектированы заранее.

Практическое задание ​

Задача: нарисуйте identity lifecycle для одного продукта.

Укажите:

  1. population и namespace identifiers;
  2. нужен ли real-world proofing и почему;
  3. claimed, validated и derived attributes;
  4. внутренний ID и external bindings;
  5. enrollment authenticators;
  6. rename, duplicate, merge, recovery и deletion;
  7. PII retention и enumeration controls.

Критерии готовности: ни один изменяемый attribute не используется как вечный primary key; linking имеет проверяемое основание и rollback; объём proofing соразмерен риску.

Подсказка

Проверьте модель на двух людях с одинаковым именем, смене email, повторном использовании номера телефона и двух IdP с одинаковым subject.

Проверка знаний ​

ИНТЕРАКТИВНАЯ ПРОВЕРКА

Проверка знаний

0 / 4
01Почему email не следует использовать как вечный primary key пользователя?
02Какие действия относятся к identity proofing?
03Любой пользовательский аккаунт обязан быть связан с паспортной личностью.
04Восстановите упрощённый путь identity proofing и enrollment.
  1. Создать subscriber account и привязать authenticator
  2. Получить заявленную identity и attributes
  3. Проверить принадлежность evidence заявителю
  4. Проверить evidence и attributes
Проверено: 0 из 4

Самопроверка ​

  1. Чем identifier отличается от attribute?
  2. Почему proofing и authentication разделены?
  3. Когда pseudonymous account лучше verified legal identity?
  4. Почему issuer + subject надёжнее одного email для federation binding?
Ответы и критерии
  1. Identifier однозначно обозначает entity в контексте; attribute описывает её и может меняться или совпадать у нескольких entities.
  2. Proofing устанавливает связь claimed identity с субъектом при enrollment; authentication позже доказывает контроль bound authenticator.
  3. Когда сервису нужна continuity, но real-world identity не требуется для управления риском; это уменьшает сбор PII и friction.
  4. Subject определён в namespace issuer, тогда как email изменяем, может быть переиспользован и не доказывает одну identity между providers.

Краткое резюме ​

  • Identification определяет, какую identity различает система.
  • Реальный человек, account, identifier, attribute и authenticator — разные сущности.
  • Proofing состоит из resolution, validation и verification и нужен не всегда.
  • Внутренний ID должен быть стабильным и не содержать лишних PII.
  • Identity требует полного lifecycle, а не только формы регистрации.

Следующие шаги ​

Статья «Аутентификация и авторизация» продолжает путь: как actor доказывает контроль identity и как backend принимает решение о конкретном действии.

Источники ​