От Basic Auth до OIDC: тестирование аутентификации и авторизации для QA-инженеров |
13.10.2025 00:00 | ||||||||||||||||
Автор: Екатерина Ступкина Представьте, что аутентификация — это ключ от дома, а авторизация — список комнат, в которые этот ключ открывает дверь. В современных приложениях простой ключ-пароль заменяется сложными системами: токенами, OAuth 2.0 и OIDC. Я, Екатерина, QA Lead в «Лиге Ставок», покажу, как с помощью инструментов тестирования проводить базовые проверки: тестировать валидность токенов, отслеживать их обновление и проверять корректность прав доступа. Это руководство из трех частей поможет систематизировать знания и применять их в работе — от основ до реальных кейсов. Часть 1: Эволюция аутентификации От Basic Auth к токенам: как развивались методы проверки подлинности и почему простой авторизации стало недостаточно. Часть 2: Современные стандарты Single Sign-On (SSO), OAuth 2.0, форматы токенов — разбираем основные протоколы и механизмы авторизации. Часть 3: Практика для QA Реальные примеры тестирования: инструменты и методы для базовые проверки безопасности аутентификации и авторизации. Для начала разберем, в чем отличие и смысл следующих понятий:
Рассмотрим жизненный пример поездки на самолете:
Краткая суть:
Представь, как это работает, например, в «Лиге Ставок»:
Виды аутентификации и авторизацииАутентификация по токенам:
BasicBasic — это простейший способ передачи учетных данных, при котором логин и пароль пользователя объединяются в одну строку, кодируются в формат base64 и отправляются в заголовке HTTP-запроса. Поскольку данные не шифруются, в чистом HTTP этот метод крайне небезопасен и позволяет легко перехватить пароль. Однако при использовании защищенного протокола HTTPS, который обеспечивает сквозное шифрование всего соединения, передача становится безопасной, так как данные передаются внутри зашифрованного канала. Алгоритм:
Беспрепятственный доступ - После успешной аутентификации пользователь получает доступ к ресурсам без повторного ввода данных Ключевые особенности Basic Auth:
Эта схема отлично подходит для внутренних API или простых систем, но для публичных сервисов лучше использовать более безопасные методы (OAuth, JWT). Пример: рассмотрим на некотором хосте example.com Host: example.com Authorization: Basic YWxhZGRpbjpvcGVuc2VzYW1l Результат, после декодирования: Basic = Логин + ":" + Пароль = aladdin:opensesame Это и есть заголовок Authorization с base64-кодированными данными, которые передаются во все последующие запросы Для декодирования:https://www.base64decode.org/ru BearerBearer — это любые, полученные пользователем от провайдера API, данные, которые при передаче в этот API подтверждают его (пользователя) личность. В большинстве случаев это текстовые токены того или иного формата На схеме пример авторизации на сайте. После входа в "личный кабинет" при помощи ввода телефона или почты и пароля, вам становится доступна функция генерации токена. Вы нажимаете на кнопку "Войти". Проверка пользователя в базе данных - получили сгенерированную строку, после чего передаете её в каждом своем запросе к API. Эта строка - Bearer token. Это метод проверки подлинности пользователя веб-приложения, при котором пользователю отображается HTML-страница для ввода логина и пароля Session tokenSession token — это уникальный временный идентификатор, который присваивается пользователю во время процесса входа на веб-сайт или в приложении Алгоритм:
Приложение может создать session token двумя способами:
Отличие session и bearer token: сессия передается в каждом запросе и при этом хранится на сервере или бд, поэтому каждый запрос = поход на сервер; bearer token - не требует хранения состояния на сервере, что упрощает масштабирование и распределение нагрузки Замечание Необходимо понимать, что перехват session token зачастую дает аналогичный уровень доступа, что и знание username/password. Поэтому все коммуникации между клиентом и сервером в случае forms authentication должны производиться только по защищенному соединению HTTPS. CA - это ваше цифровое удостоверение, которое выдает доверенная организация. Оно подтверждает вашу личность в сети, а ваш секретный ключ служит паролем, который доказывает, что это удостоверение именно ваше.. Также сертификат криптографически связан с закрытым ключом, который хранится у владельца сертификата и позволяет однозначно подтвердить факт владения сертификатом. Во время аутентификации сервер выполняет проверку сертификата на основании следующих правил:
Проверка на отзыв: Сертификат не должен быть досрочно отозван своим Удостоверяющим Центром. Это проверяется по специальным спискам отозванных сертификатов. После аутентификации приложение может выполнить авторизацию запроса на основании сертификата, где есть как subject (имя владельца), issuer (эмитент), serial number (серийный номер сертификата) или thumbprint (отпечаток открытого ключа сертификата) Разберем пример реальной жизни для более легкого понимания
???? Аналогия с цифровыми сертификатами:
Сертификат — это цифровой паспорт для сайтов, который:
Two-factor authentication (2FA)Одноразовые пароли используются как дополнительная защита вместе с основным паролем. Это называется двухфакторной аутентификацией (2FA). Для входа нужно подтвердить две вещи:
Такой подход сильно повышает безопасность. В этой концепции необходимо предоставить данные двух типов для входа в систему: что-то, что он знает (например, пароль), и что-то, чем он владеет (например, устройство для генерации одноразовых паролей). Источники для создания одноразовых паролей:
Access key, API keyСпособ для программ и сервисов обращаться к API без пароля пользователя. Используется длинный уникальный ключ, который легко отозвать в случае утечки, не затрагивая основную учётную запись. Более безопасен и удобен для автоматизации, чем пароли. Ключи имеют высокую энтропию, что делает их устойчивыми к подбору. Компрометация ключа не затрагивает основную учётную запись пользователя. Достаточно отозвать старый ключ и выпустить новый. |