Сервер ресурсов (resource server) — это сервер, на котором размещены защищенные ресурсы, способный принимать и отвечать на запросы к защищенным ресурсам с использованием токенов доступа.
Назначение
Сервер ресурсов обеспечивает безопасный доступ к данным или функциям, хранящимся на нем, в рамках протокола OAuth 2.0. Его основные задачи:
- Хранение защищенных ресурсов, таких как пользовательские данные, файлы или API.
- Проверка токенов доступа, предоставленных клиентом.
- Предоставление доступа к ресурсам в соответствии с политиками и областями видимости (scopes).
- Защита данных от несанкционированного доступа.
Сервер ресурсов используется в веб-приложениях, мобильных приложениях, API и системах Интернета вещей, где требуется управление доступом.
Роль в OAuth 2.0
В протоколе OAuth 2.0 сервер ресурсов взаимодействует с клиентом и сервером авторизации. Он отвечает за:
- Прием запросов от клиента с токеном доступа.
- Валидацию токена (проверка подлинности, срока действия и прав доступа).
- Предоставление доступа к ресурсам, если токен соответствует требованиям.
Сервер ресурсов может быть отдельной системой или частью сервера авторизации, если они объединены в одном сервисе.
Взаимодействие с другими компонентами
В OAuth 2.0 сервер ресурсов работает в связке с другими ролями:
- Клиент: Приложение, отправляющее запросы с токеном доступа.
- Владелец ресурса: Пользователь, чьи данные хранятся на сервере ресурсов.
- Сервер авторизации: Выдает токены доступа после аутентификации владельца ресурса.
Процесс взаимодействия:
- Клиент получает токен доступа от сервера авторизации.
- Клиент отправляет запрос с токеном на сервер ресурсов.
- Сервер ресурсов проверяет токен (либо самостоятельно, если это JWT, либо через сервер авторизации для непрозрачных токенов).
- При валидном токене сервер предоставляет доступ к данным.
Типы токенов
Сервер ресурсов поддерживает два основных формата токенов:
- JSON Web Token (JWT): Самодостаточный токен, содержащий информацию о правах и подпись для проверки. Сервер ресурсов может валидировать JWT локально, используя публичный ключ.
- Непрозрачный токен (Opaque): Уникальная строка, не содержащая читаемой информации. Для проверки требуется запрос к серверу авторизации (например, через конечную точку introspect).
Тип токена | Описание | Преимущества | Недостатки |
JWT | Содержит данные и подпись, проверяется локально | Быстрая проверка, масштабируемость | Требует управления ключами |
Opaque | Простая строка, проверяется сервером авторизации | Простота, высокая безопасность | Зависимость от сервера авторизации |
Политики доступа и области видимости
Сервер ресурсов использует политики доступа и области видимости (scopes) для управления доступом:
- Политики доступа: Определяют, какие действия разрешены клиенту на основе токена.
- Области видимости (scopes): Указывают, к каким ресурсам или функциям предоставлен доступ (например, read:orders, write:profile).
Примеры соглашений об именовании scopes:
- Действие: read, write.
- Действие и ресурс: read:orders, write:profile.
- URI и действие: https://api.example.com/orders:read.
Для упрощения управления scopes используется расширение OAuth 2.0 — Resource Indicators (RFC 8707), позволяющее явно указывать ресурсы через URI.
Настройка сервера ресурсов
Для настройки сервера ресурсов (например, с использованием Spring Security OAuth2) выполняются следующие шаги:
- Добавление зависимостей для поддержки OAuth 2.0.
- Включение режима сервера ресурсов (например, через аннотацию @EnableResourceServer).
- Настройка стратегии проверки токенов:
- Для JWT: указание JWK Set URI или локального ключа.
- Для Opaque: указание конечной точки проверки токенов (token-info-uri).
- Определение политик доступа для endpoint’ов (например, требование scope read:orders).
- (Опционально) Настройка конечной точки用户信息 (user-info-uri) для получения данных о пользователе.
Безопасность
Сервер ресурсов повышает безопасность за счет:
- Проверки токенов доступа перед предоставлением данных.
- Использования HTTPS для защиты передачи токенов.
- Ограничения доступа через scopes и политики.
Риски:
- Неправильная валидация токенов может привести к несанкционированному доступу.
- Зависимость от сервера авторизации для непрозрачных токенов увеличивает нагрузку.
- Утечка токенов в незащищенных каналах.
Для минимизации рисков рекомендуется:
- Использовать JWT для локальной проверки, если это возможно.
- Применять Resource Indicators для четкого указания ресурсов.
- Регулярно обновлять ключи и политики доступа.
Применение
Серверы ресурсов используются в различных сценариях:
- Веб-API: Предоставление доступа к данным, таким как история заказов или профиль пользователя.
- Облачные сервисы: Доступ к файлам или данным в хранилищах.
- Мобильные приложения: Получение пользовательских данных через защищенные endpoint’ы.
- IoT-устройства: Доступ к данным или функциям через API.
Значение в современных системах
Сервер ресурсов — ключевой компонент OAuth 2.0, обеспечивающий безопасный доступ к данным в распределенных системах. Он позволяет приложениям работать с пользовательскими данными, сохраняя контроль владельца ресурсов. С развитием стандартов, таких как Resource Indicators, серверы ресурсов становятся более гибкими и масштабируемыми.