Я только что прочитал эту статью , которой несколько лет, но в которой описан умный способ защиты ваших REST API. По существу:
- Каждый клиент имеет уникальную пару открытый / закрытый ключ
- Только клиент и сервер знают закрытый ключ; оно никогда не отправляется по проводам
- При каждом запросе клиент принимает несколько входных данных (сам запрос, текущую метку времени и закрытый ключ) и запускает их через функцию HMAC, чтобы создать хэш запроса
- Затем клиент отправляет на сервер обычный запрос (который содержит открытый ключ) и хэш
- Сервер ищет закрытый ключ клиента (на основе предоставленного открытого ключа) и выполняет некоторую проверку метки времени (которую я, правда, не понимаю), которая проверяет, что запрос не является жертвой атаки воспроизведения
- Если все хорошо, то сервер использует закрытый ключ и ту же функцию HMAC для генерации собственного хэша запроса
- Затем сервер сравнивает оба хэша (тот, который был отправлен клиентом, и тот, который он сгенерировал); если они совпадают, запрос аутентифицируется и разрешается продолжить
Затем я наткнулся на JWT , что звучит очень похоже. Однако в первой статье вообще не упоминается JWT, и поэтому мне интересно, отличается ли JWT от вышеуказанного аутентификационного решения, и если да, то как.