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

Ответ от нейросети

sobes.tech AI

Токен в контексте аутентификации и авторизации — это непрозрачная строка данных, выданная сервером после успешной аутентификации пользователя (или клиента). Он представляет собой учетные данные пользователя или клиента для дальнейшего доступа к защищенным ресурсам без необходимости повторно вводить логин и пароль.

Типы токенов:

  • Bearer Token: Самый распространенный тип, передается в заголовке Authorization как Bearer <токен>. Получатель токена (сервер) должен предоставить доступ тому, кто "несет" (bearer) токен, без дополнительной проверки подлинности.
  • JWT (JSON Web Token): Структурированный, самодостаточный токен, содержащий информацию о пользователе или сессии в закодированном виде. Состоит из трех частей, разделенных точками: заголовок (header), полезная нагрузка (payload) и цифровая подпись (signature). Может быть подписан (JWS) или зашифрован (JWE).

Наши тестовые сценарии для работы с токенами включают:

  1. Получение токена: Проверка корректности запроса аутентификации и успешного получения токена.
  2. Использование токена: Проверка доступа к защищенным ресурсам с действительным токеном.
  3. Недействительный/истекший токен: Проверка отказа в доступе при использовании некорректного, поддельного или истекшего токена.
  4. Отсутствие токена: Проверка отказа в доступе при попытке доступа без токена.
  5. Обновление токена (Refresh Token): Если используется, проверка механизма получения нового Access Token с помощью Refresh Token.
  6. Отзыв токена (Revocation): Проверка успешного отзыва токена и последующего отказа в доступе.

При автоматизации используем:

  • Библиотеки HTTP-клиентов (например, requests в Python, Axios в JavaScript) для отправки запросов с токенами.
  • Парсинг ответа для извлечения токена.
  • Сохранение токена в переменной для последующего использования.
import requests

# Пример получения токена (запрос к fictitious_auth_endpoint)
url = "https://api.example.com/auth"
payload = {
    "username": "testuser",
    "password": "password123"
}

try:
    response = requests.post(url, json=payload)
    response.raise_for_status() # Проверка на ошибки HTTP (4xx, 5xx)
    token_data = response.json()
    auth_token = token_data.get("access_token") # Получаем токен из ответа

    if auth_token:
        print(f"Successfully received token: {auth_token}")

        # Пример использования токена (запрос к protected_resource)
        protected_url = "https://api.example.com/protected"
        headers = {
            "Authorization": f"Bearer {auth_token}" # Передача токена в заголовке
        }
        protected_response = requests.get(protected_url, headers=headers)
        protected_response.raise_for_status()
        print("Access to protected resource successful!")
        print(protected_response.json())
    else:
        print("Failed to get token from response.")

except requests.exceptions.RequestException as e:
    print(f"Request failed: {e}")

В целом, токен обеспечивает безопасный и безстатусный способ управления доступом, снижая нагрузку на сервер аутентификации при каждом запросе к защищенным ресурсам.