У меня есть GraphQL API, построенный с использованием графена и Flask.API в настоящее время служит только бэкэндом для веб-сайта и содержит такие операции, как поиск, создание заказа и т. Д. Некоторые операции являются полностью открытыми, некоторые ограничены входом в систему пользователей.На данный момент я использую токены JWT для аутентификации пользователей.Я хотел бы включить другой уровень авторизации, который учитывает, откуда поступают запросы.Все примеры, которые я видел, используют только одно измерение - пользователи.Либо есть зарегистрированный пользователь (возможно, с некоторыми ролями / областями действия), либо его нет.Это то, что я реализовал на данный момент.Однако я хотел бы включить другое измерение - происхождение.Несколько примеров:
- Я бы хотел оценить ограничение запросов от неизвестного происхождения иначе, чем запросы с веб-сайта (надежный источник).
- Я хотел бы разрешить ограниченные операции (например,создать анонимный заказ) с веб-сайта без аутентификации пользователя, но полностью запретить эту операцию, когда запрос происходит из неизвестного местоположения.
- Я хотел бы ограничить число результатов запроса поиска, когда запрос приходит из неизвестного местоположения(фиктивная защита от соскобов), позволяя получать неограниченные результаты, когда они приходят с веб-сайта.
Есть несколько подходов, о которых я могу подумать, но мне не совсем нравится ни один из них:
- Создайте два API - один общедоступный и один частный (только веб-сайт).Это ИМХО приведет к ненужному дублированию.
- Используйте тот же процесс входа в систему даже с доверенного сайта и назначьте некоторый admin JWT токен.Это имеет неверную семантику и небезопасно.
Что является стандартом де-факто для решения подобных проблем?