некое API. Технологии не важны, но для контекста: PHP7 и GraphQL.
Далее есть некие клиенты, которые работают с API:
CLIENT1 - панель управления (админка) / ReactJS
CLIENT2 - клиент для гостей / PHP
CLIENT3 - личный кабинет для зарегистрированных / ReactJS
CLIENT4 - блог / PHP
...
Сейчас аутентификация пользователя на API происходит через JWT-token. Если вкратце, то мы делаем некий запрос с логином и паролем, получаем некий токен и с помощью него делаем уже авторизованные запросы.
Далее я столкнулся со следующим вопросом: а как аутентифицировать клиенты?
API имеет ряд запросов, которые не покрывает JWT, тоесть данные по этим запросам можно получить без аутентификации. Например пользователь заходит на CLIENT4, CLIENT4 в свою очередь делает запрос на API, получает список статей и показывает их пользователю (пользователь может быть гостем). Тут все верно.
Однако остается и такой вариант, когда пользователь может миновать CLIENT4, сделать запрос к API и получить данные на прямую. Вопрос заключается в том, как лучше всего закрыть API от всех прямых запросов и дать доступ только определенным клиентам?
———————————————————————————-
Некоторые дополнительные размышления.
Хорошим и безопасным вариантом было бы ограничить доступ и сделать API локальным, однако некоторые клиенты могут быть на другом сервере или требовать внешний доступ (например мобильные устройства).
Я отказался от использования протокола OAuth2, так-как по сути в проекте нет 3 стороны. Поэтому получается не совсем то, что нужно.
Единственный вариант пока приходит в голову, это некий дополнительный токен, который хранит каждый клиент и получает доступ к API подставляя в каждый запрос.
Собственно хотелось бы получить советы/рекомендации, возможно ссылки на технологии/протоколы, которые упустил.
В чём проблема запихнуть название/идентификатор клиента в сам токен?
Может зарегать клиентов у себя в базе, дать им private public ключи, и далее проводить аутентификацию с помощью них? по публичному токену аутентифициурешь клиента, по приватному проверяешь подлинность подписи.
Вот тут
Обсуждают сегодня