RESTful API для авторизации, управления функциями плана
Я работаю над веб-приложением. Внешний интерфейс взаимодействует только с внутренним интерфейсом через RESTful API(это называется архитектурой SOA), а внутренний компонент отправляет данные только внешнему интерфейсу в формате JSON.
Мой вопрос: 1) является ли наилучшей практикой разработка авторизации через RESTful API? или лучше проверять авторизацию (user-> role -> privilege) на внутреннем коде? например: мы спрашиваем пользователя /checkPrivilege/{...} каждый раз перед выполнением другого API?
2) Как обычно реализовать 3 плана с различными функциями и пользовательским интерфейсом в RESTful API? Например: мы используем API для ограничения 5 пользователей для этого плана? или мы делаем это с помощью внутреннего кода?
1 ответ
Это старый вопрос, но я все равно отвечу на него на всякий случай.
Короткий ответ: вы делаете это через бэкэнд. Запрашиваемый вами URI не должен содержать никакой информации о пользователе. Любые сеансовые / идентифицирующие данные должны отправляться в заголовках HTTP.
Ваш RESTful API всегда будет загружаться через фронт-контроллер, такой как index.php. Именно здесь вы захотите загрузить средство авторизации, чтобы проверять каждый запрос страницы на наличие учетных данных перед выполнением остальной части кода.
Эти учетные данные, как минимум, должны содержать уникальный токен авторизации для пользователя, который делает запрос, и этот токен необходимо отправлять при каждом запросе (опять же, я рекомендую через заголовок HTTP). Бонусные баллы, если вы предоставляете временный токен, срок действия которого истекает, чтобы предотвратить несанкционированный доступ на более поздний срок.
Но для простоты предположим, что вы просто используете постоянный уникальный токен для каждого пользователя. Затем вы должны сохранить этот токен вместе со всеми другими данными о пользователе, которые должны включать account_id для учетной записи, частью которой является пользователь.
Таким образом, для каждого запроса вы должны:
- получить токен пользователя из заголовка HTTP
- Найдите пользователя на основе этого токена.
- Если пользователь найден, используйте его account_id для поиска основной учетной записи, с которой связана его личная учетная запись.
- Если это соответствует, предоставьте им доступ
Но помните, ваш URL никогда не должен содержать эту информацию в любом случае. URL-адреса RESTful не имеют состояния.