← Назад к вопросам

В чём разница между Authorization и Authentication?

2.0 Middle🔥 202 комментариев
#Клиент-серверная архитектура#Тестирование API

Комментарии (2)

🐱
deepseek-v3.2PrepBro AI5 апр. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Authentication и Authorization

Это фундаментальное различие в безопасности информационных систем. Authentication и Authorization — это два последовательных, но принципиально разных процесса контроля доступа, часто обозначаемых как AuthN и AuthZ.

Authentication (Аутентификация): "Кто вы?"

Authentication — это процесс верификации личности пользователя или системы. Другими словами, это проверка подлинности заявленной идентичности. Система задаёт вопрос: "Вы действительно тот, за кого себя выдаёте?"

  • Цель: Подтвердить, что пользователь — это именно тот, кем он является.
  • Пример из жизни: Предъявление паспорта на контроле в аэропорту. Вы заявляете, что вы — Иванов Иван, и предъявляете документ, это доказывающий.
  • Результат: Установление идентичности (identity). После успешной аутентификации система знает, кто вы.

Основные методы аутентификации (факторы):

  • Что-то, что вы знаете: Пароль, PIN-код, ответ на секретный вопрос.
  • Что-то, что у вас есть: Физический токен (RSA token, YubiKey), смартфон с приложением-аутентификатором, SMS-код.
  • Что-то, что вы есть: Биометрические данные (отпечаток пальца, распознавание лица, сканирование сетчатки).

Пример кода проверки логина и пароля (простейшая аутентификация):

def authenticate(username, provided_password):
    # В реальном приложении пароль хранится в хэшированном виде в БД
    stored_user_hash = get_password_hash_from_db(username)

    if verify_password(provided_password, stored_user_hash):
        user_id = get_user_id_from_db(username)
        return True, user_id  # Аутентификация успешна, возвращаем ID пользователя
    else:
        return False, None   # Аутентификация провалена

Authorization (Авторизация): "Что вам разрешено?"

Authorization — это процесс определения прав доступа уже аутентифицированного пользователя к ресурсам или действиям в системе. Вопрос здесь другой: "Имеет ли этот конкретный пользователь право выполнить это действие или получить доступ к этим данным?"

  • Цель: Проверить разрешения пользователя на выполнение операции.
  • Пример из жизни: Наличие у вас посадочного талоната на конкретный рейс. Паспорт (аутентификация) подтвердил вашу личность, но талон (авторизация) даёт право сесть именно в самолёт SU-123 в бизнес-класс.
  • Результат: Разрешение или запрет на выполнение действия (action). Система знает, что вам можно делать.

Основные модели авторизации:

  • RBAC (Role-Based Access Control): Права назначаются ролям (например, "Администратор", "Редактор", "Гость"), а пользователи получают роли.
  • ABAC (Attribute-Based Access Control): Доступ определяется динамически на основе атрибутов пользователя, ресурса, действия и контекста (например, время суток, местоположение).

Пример кода проверки прав доступа (авторизация) с использованием RBAC:

def check_authorization(user_id, required_permission, resource_id=None):
    user_roles = get_user_roles_from_db(user_id)

    # Получаем все разрешения, которые есть у пользователя через его роли
    user_permissions = set()
    for role in user_roles:
        permissions = get_role_permissions_from_db(role)
        user_permissions.update(permissions)

    # Проверяем, есть ли у пользователя необходимое разрешение
    if required_permission in user_permissions:
        # Дополнительная проверка: принадлежит ли ресурс пользователю?
        if resource_id:
            if user_owns_resource(user_id, resource_id):
                return True
            else:
                return False  # Ресурс принадлежит другому пользователю
        return True  # Авторизация успешна
    else:
        return False # У пользователя нет необходимых прав

Ключевые различия в виде таблицы

КритерийAuthenticationAuthorization
Суть процессаПроверка подлинности идентичности.Проверка прав на доступ.
Вопрос"Кто вы?""Что вам разрешено?"
Что определяетИдентичность пользователя (Identity).Привилегии пользователя (Permissions).
Когда происходитПервым делом, при входе в систему.После успешной аутентификации, при каждой попытке выполнить действие.
ПримерыВвод логина/пароля, сканирование отпечатка пальца.Доступ к админ-панели, возможность удалить файл, просмотр чужого профиля.

Почему это важно для QA-инженера?

  1. Тестирование сценариев безопасности: Необходимо тестировать оба аспекта отдельно и в связке. Например:
    *   Попытка доступа к защищённому API без токена (провал **аутентификации**).
    *   Доступ с токеном обычного пользователя к эндпоинту админа (успешная **аутентификация**, но провал **авторизации**).
  1. Понимание логики приложения: Помогает правильно составлять тест-кейсы, разделяя проверки "доступа в систему" и "прав внутри системы".
  2. Анализ логов и ошибок: Коды ответов 401 Unauthorized (на самом деле означает "неаутентифицирован") и 403 Forbidden (означает "неавторизован") чётко различают эти два этапа сбоя. QA должен понимать эту разницу.
  3. Тестирование RBAC/ABAC: Требует создания множества тестовых пользователей с разными ролями и проверки всех бизнес-правил доступа.

Итог: Authentication — это ворота в систему, а Authorization — это набор правил, определяющих, куда вам можно ходить внутри этих ворот. Безопасная система всегда требует и то, и другое.

В чём разница между Authorization и Authentication? | PrepBro