Найти тему
HowToSchool

SD-EP59: Как организовать доступ к Web-API для вашего сайта?

Когда мы открываем пользователям доступ к Web-API, нам необходимо убедиться, что каждый вызов API аутентифицирован. Это означает, что мы хотим быть уверенны в том, что пользователь — это пользователь ;).

Мы рассмотрим два распространенных способа:

Аутентификация на основе токенов

Шаг 1 — пользователь вводит свой пароль в клиенте, и клиент отправляет пароль на сервер аутентификации.

Шаг 2. Сервер аутентификации проверяет учетные данные и генерирует токен со сроком действия.

Шаги 3 и 4 — теперь клиент может отправлять запросы к ресурсам сервера с токеном в HTTP-заголовке. Этот доступ действителен до истечения срока действия токена.

Аутентификация HMAC

Этот механизм генерирует подпись с помощью хеш-функции (SHA256 или MD5).

Шаги 1 и 2 — сервер генерирует два ключа: один — публичный идентификатор приложения (открытый ключ), а другой — ключ API (закрытый ключ).

Шаг 3 — теперь мы генерируем подпись HMAC на стороне клиента (hmac A). Эта подпись создается с помощью набора атрибутов (public app ID, ...).

Шаг 4 — клиент отправляет запрос к ресурсам сервера с hmac A в HTTP-заголовке.

Шаг 5 – сервер получает запрос, содержащий данные запроса и заголовок аутентификации. Он извлекает необходимые атрибуты из запроса и использует ключ API, хранящийся на стороне сервера, для создания подписи (hmac B.).

Шаги 6 и 7 — сервер сравнивает hmac A (сгенерированный на стороне клиента) и hmac B (сгенерированный на стороне сервера). Если они совпадают, запрошенный ресурс будет возвращен клиенту.

P.S. Как аутентификация HMAC обеспечивает целостность данных? Почему мы включаем «метку времени запроса» в генерацию подписи HMAC?