System Design Space

    Глава 162

    Обновлено: 16 февраля 2026 г. в 03:00

    Идентификация, аутентификация и авторизация (AuthN/AuthZ)

    Прогресс части0/12

    Практическое введение в трио Identification -> Authentication -> Authorization и современные протоколы: OAuth 2.0/OIDC, SAML, WebAuthn, mTLS.

    Spec

    OpenID Connect Core

    Базовая спецификация OIDC для user authentication поверх OAuth 2.0.

    Открыть спецификацию

    В продакшене чаще всего ломаются не криптографические алгоритмы, а границы ответственности: где заканчивается идентификация, где начинается аутентификация, и в каком месте принимать решение авторизации. Эта глава фиксирует практическую модель Identification Authentication Authorizationи показывает, какие протоколы сегодня обычно используют для user и service сценариев.

    Трио: Identification - AuthN - AuthZ

    Identification

    Кем ты представился

    • Субъект сообщает идентификатор: email, phone, employee ID, service account name.
    • Идентификатор не доказывает личность сам по себе.
    • Должен быть уникальным в своем домене (tenant/org/system).

    Authentication (AuthN)

    Ты действительно тот, за кого себя выдаешь

    • Проверка факторов: пароль, OTP, passkey (WebAuthn), клиентский сертификат.
    • Результат AuthN: подтвержденная identity + метод и уровень уверенности.
    • Текущий стандарт для пользователей: MFA и отказ от password-only сценариев.

    Authorization (AuthZ)

    Что тебе разрешено делать

    • Проверка прав на действие над ресурсом в конкретном контексте.
    • RBAC, ABAC, ReBAC или policy-as-code (OPA/Cedar).
    • Решение AuthZ всегда зависит от subject + action + resource + context.

    BCP

    OAuth 2.0 Security BCP

    Рекомендации IETF по безопасной реализации OAuth 2.0.

    Открыть RFC 9126

    Как это обычно реализуют сейчас

    User -> App/API

    • IdP (OIDC) проводит аутентификацию пользователя.
    • Приложение получает session или токены и обновляет их по безопасной политике.
    • API проверяет access token (issuer, audience, expiry, signature).
    • AuthZ выполняется на API или в выделенном policy engine.

    Service -> Service

    • mTLS для подтверждения service identity на сетевом уровне.
    • Короткоживущие credentials/tokens вместо long-lived secrets.
    • Fine-grained AuthZ по policy-as-code для внутренних API.
    • Полный audit trail: кто, куда, зачем и с каким решением policy.

    Control Plane

    • Централизованный IdP + каталог identities.
    • Отдельный policy store и policy decision point.
    • JIT access, least privilege, periodic access review.
    • Автоматический revoke и deprovision при изменении роли/статуса.

    Основные протоколы и стандарты

    OAuth 2.0 + PKCE

    For: Delegated access to APIs

    Where: Web/mobile/public clients

    Note: Используйте Authorization Code Flow + PKCE; implicit flow не использовать.

    OpenID Connect (OIDC)

    For: Authentication layer on top of OAuth 2.0

    Where: SSO, user login, identity claims

    Note: ID Token про identity, Access Token про доступ к API.

    SAML 2.0

    For: Enterprise SSO

    Where: Legacy enterprise integrations

    Note: Часто встречается в корпоративных IdP/SSO-порталах.

    WebAuthn / FIDO2

    For: Passwordless and phishing-resistant auth

    Where: End-user authentication

    Note: Passkeys как modern baseline для user auth в клиентских приложениях.

    mTLS + workload identity

    For: Service-to-service authentication

    Where: Microservices and zero-trust networks

    Note: Комбинируйте с SPIFFE/SPIRE или аналогичной системой доверия.

    SCIM

    For: Identity provisioning lifecycle

    Where: B2B/B2E user lifecycle

    Note: Не AuthN/AuthZ протокол, а стандарт provisioning/deprovisioning.

    Важно: JWT — это формат токена, а не протокол аутентификации/авторизации. Без валидных правил проверки и управления ключами JWT сам по себе не решает задачу безопасности.

    Частые ошибки в продакшене

    • Путать AuthN и AuthZ: успешный login не означает право на любое действие.
    • Хранить access tokens слишком долго или без строгой ротации ключей.
    • Использовать одну роль 'admin' без детализации прав по операциям и ресурсам.
    • Проверять подпись JWT, но не проверять issuer/audience/expiry/nbf.
    • Оставлять 'вечные' сервисные ключи вместо короткоживущих identity-based credential.
    • Не вести единый audit лог решений авторизации и событий доступа.

    Связанные материалы

    Для high-risk систем обязательно добавляйте threat modeling и security testing в CI/CD, а не только "правильный" выбор протокола.