В одной из рассылок от ByteByteGo пришла прекрасная инфографика с 12 способами сделать API безопаснее. Буду по мере сил публиковать более подробное описание каждого из пунктов.
Итак, первый способ - это HTTPS
HTTPS - это HTTP с обеспечением безопасности (HTTP over TLS/SSL).
В рамках взаимодействия по HTTPS происходит шифрование данных и проверка сертификатов.
При установке соединения сервер отправляет клиенту свой сертификат и открытый ключ (public key). На основе открытого ключа генерируются сессионные ключи (session key), которые живут только одну сессию.
Далее с помощью session key клиент сверяет данные из сертификата с данными сервера, от которого приходят запросы. Если данные (например, имя) сервера не совпадают с указанными в сертификате - клиент может прервать соединение, либо сообщить о проблеме пользователю.
Аналогичным образом сервер может проверять сертификат клиента. Так HTTPS-соединение помогает избежать перехвата данных.
Но даже если данные будут перехвачены - их нельзя будет просто так прочитать. Так как HTTPS обеспечивает шифрование данных. Расшифровать сообщения можно только с помощью закрытого ключа (private key).
Часто, при взаимодействиях внутри контура компании, HTTPS-ресурс используют именно при аутентификации/получении токена. А дальнейшее взаимодействие идет по обычному HTTP.
То есть создается отдельный API для авторизации - туда по HTTPS передается логин и пароль. В ответ сервис авторизации присылает токены.
Далее клиент с этими токенами идет в API сервисов, содержащих нужные ему данные. Особенно это удобно при микросервисной архитектуре - клиенту не нужно проходить аутентификацию в каждом из сотни микросервисов.
Если взаимодействие между сервисами происходит под VPN, то часто в HTTPS нет необходимости.
Но все же так шанс перехватить токен становится выше, поэтому важно, чтобы время жизни токена было небольшое.
Источники:
- https://www.cloudflare.com/learning/ssl/what-is-a-session-key/
- https://ru.wikipedia.org/wiki/HTTPS
- https://en.wikipedia.org/wiki/HTTPS
- Вот тут можно почитать, зачем сайтам использовать HTTPS и как это влияет на SEO
Post #45
6.36K