Авторизация в API — это процесс проверки подлинности пользователя или приложения, отправляющего запрос к API, и предоставления ему доступа в соответствии с его правами.
Основные типы авторизации в API:
- Basic Authentication: Отправка имени пользователя и пароля в заголовке
Authorization в кодировке Base64. Простая, но не безопасная (передача учетных данных в открытом, хоть и закодированном, виде).
- API Key: Передача уникального ключа в заголовке, параметре запроса или теле запроса. Ключ связывается с конкретным пользователем/приложением и используется для идентификации и контроля доступа. Менее безопасен при передаче в URL.
- OAuth 2.0: Стандарт авторизации, позволяющий сторонним приложениям получать ограниченный доступ к пользовательским данным от имени самого пользователя, без раскрытия его учетных данных. Основан на предоставлении токенов доступа.
Authorization Code Grant (для веб-приложений)
Implicit Grant (для одностраничных приложений)
Resource Owner Password Credentials Grant (небезопасен)
Client Credentials Grant (для сервер-сервер взаимодействия)
- JWT (JSON Web Token): Компактный, URL-безопасный способ представления утверждений между двумя сторонами. JWT состоит из трех частей (Header, Payload, Signature), разделенных точками. Используется для передачи информации и проверки подлинности. Часто применяется в связке с OAuth 2.0 как токен доступа.
- Bearer Token: Означает, что держатель токена имеет право доступа к ресурсу. Токен передается в заголовке
Authorization в формате Bearer <token>. Обычно используется с OAuth 2.0 и JWT.
- Session-Based Authentication: После успешного входа сервер создает сессию для пользователя и отправляет ему Session ID (обычно в cookie). В последующих запросах клиент отправляет Session ID, и сервер идентифицирует пользователя по нему. Более применим к web-приложениям, но встречается и в API.
Выбор метода авторизации зависит от:
- Типа клиента (web, mobile, server-to-server).
- Требований к безопасности.
- Сложности реализации.
- Наличия сторонних ресурсов, к которым необходим доступ.
Пример использования Bearer токена в запросе (на примере curl):
bash