Авторизация для шаблонов множественного доступа - PullRequest
1 голос
/ 18 марта 2019

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

  • Я бы хотел оценить ограничение запросов от неизвестного происхождения иначе, чем запросы с веб-сайта (надежный источник).
  • Я хотел бы разрешить ограниченные операции (например,создать анонимный заказ) с веб-сайта без аутентификации пользователя, но полностью запретить эту операцию, когда запрос происходит из неизвестного местоположения.
  • Я хотел бы ограничить число результатов запроса поиска, когда запрос приходит из неизвестного местоположения(фиктивная защита от соскобов), позволяя получать неограниченные результаты, когда они приходят с веб-сайта.

Есть несколько подходов, о которых я могу подумать, но мне не совсем нравится ни один из них:

  • Создайте два API - один общедоступный и один частный (только веб-сайт).Это ИМХО приведет к ненужному дублированию.
  • Используйте тот же процесс входа в систему даже с доверенного сайта и назначьте некоторый admin JWT токен.Это имеет неверную семантику и небезопасно.

Что является стандартом де-факто для решения подобных проблем?

1 Ответ

0 голосов
/ 02 мая 2019

Используйте API-шлюз - это отчасти то, для чего они. Посмотрите, например, на Конг или Апидже Есть еще много.

Для базового контроля доступа, например анонимные и аутентифицированные или регулирующие, они должны быть в состоянии справиться с этим. Для дополнительных сценариев авторизации обратитесь к управлению доступом на основе атрибутов (). Это средство для реализации внешней авторизации с использованием политик, написанных в . Это позволит вам обрабатывать любые типы авторизации. Компания, в которой я работаю, Axiomatics , специализируется на авторизации API. Мы используем ALFA и интегрируемся с такими как Kong (они делают перехват).

...