Рубрики
Без рубрики

Разрешить или не разрешать, то есть вопрос …

Некоторое время назад я разработал конкурентную платформу разведки. Не намного позже простая авторизация … Помечено Python, авторизация, JSON.

Некоторое время назад я разработал конкурентную платформу разведки. Не намного позже простая модель авторизации, используемая в инструменте, оказалась слишком простыми для всех пользователей требований.

Откуда мы пришли

Перед началом проекта у нас было решение на месте, которое было основано исключительно на отправке файлов Excel взад и вперед. Управление разрешением было легко: вы получили файл, поэтому вы авторизованы для просмотра и редактирования его. Эти файлы были разделены по стране, поэтому было очевидно, что разрешения в инструменте также будут основаны на странах. Если вам присваивалось страну, чтобы вы могли просмотреть и редактировать все записи в этой стране. В противном случае вы даже не могли видеть какие-либо записи. Позже руководство решило, что мы могли бы получить больше преимуществ от открытия инструмента немного, чтобы все могли видеть все, кроме как только редактировать предметы в странах, на которые они были назначены. Но, поскольку также есть возможность загрузки данных навалом, есть также какой-то риск. Что если кто-то, кто может покинуть компанию на плохих терминах, пойдет и скачал всю базу данных. Итак, давайте ограничим это только собственным странам.

Конечно, есть некоторые ключевые пользователи, которые уполномочены редактировать основные данные в инструменте. И они являются единственными людьми, которые могут удалять записи клиентов из базы данных. Ключевыми пользователями приближались к мне. Для того, чтобы дать другим пользователям разрешение на удаление материалов, но с ограничениями. И, как всегда, есть некоторые краевые случаи, которые должны иметь больше ограничений, чем инструмент, который в настоящее время может предложить. Или иметь больше прав и меньше ограничений.

Все это разрешение и разрешение начали получать Veeery Complex, чтобы сказать наименее.

Где мы хотели быть

Я всегда был большим поклонником того, как AWS обрабатывает разрешение на доступ к ресурсам. IAM Политики великолепны: они дают вам способ предоставить любую разрешение на любом уровне любому пользователю и убедиться, что они могут сделать все, что им нужно, ничего более, ничего меньше.

Раньше я бы уже создал прототип, который помог мне понять, как работает такая модель. Не так сложно, конечно, но система авторизации, которая имела по крайней мере следующие свойства:

  • Это должно быть основано на политике, написанных в JSON
  • Он должен быть в состоянии отрицать или разрешить любые действия на любом ресурсе на платформе
  • Вы должны быть в состоянии предоставить доступ на основе групп и индивидуальных политик, и они должны быть эффективными вместе
  • Это не должно быть слишком большим бременем производительности на конечном пользователе, то есть они не должны ждать более 10% в дополнение к тому, что они потратили в ожидании без авторизации

Как мы туда попали

Позвольте мне дать вам быструю подножку процесса, которое я использовал для разработки решения, который завершился в продуктивном применении. Он основан на моем эксперименте авторизации, который я упомянул выше.

Шаг 1: Концепция моего эксперимента

Концепция удивительно проста. Каждый пользователь и группа (страновой присваивание) имеет политический документ, который является строкой JSON. Этот политический документ состоит из имени политики, действие (то, что хочет сделать пользователи), ресурс (то, что пользователи хотят это сделать с) и эффектом (разрешить или отрицать). Каждая из этих элементов политики использует обозначение REGEX, чтобы обеспечить точную настройку. Во время выполнения эти разрешения Regexes скомпилированы и кэшируются, чтобы они могли быть использованы повторно (это помогает достичь цели эффективности). Каждый ресурс публикует свой собственный документ ресурс в качестве объекта подобного JSON. JSON-подобное, потому что все кавычки и белые пробелы после двоеточия отдаются, поэтому это не действительна JSON, но это очень похоже.

Авторизация пользователя на отдельном предмете идет так:

  1. Проверьте, есть ли Явная отрицание Политика для ресурса и действий путем сопоставления всех политиков запрещений пользователей. Если есть, запрос есть отрицал Отказ
  2. Проверьте, есть ли явный разрешение Политика для ресурса и действий путем сопоставления всех разрешать политики Regexes пользователя. Если есть, запрос есть предоставлено Отказ
  3. Если есть Нет явного разрешения Для ресурса запрос неявно отрицал Отказ

Шаг 2: Прототип

Я создал прототип в Python для моего эксперимента ( https://github.com/gaborschulz/authorization-prototype ) Чтобы понять, как на основе политики Авторизация может работать в языковых агностических рамках. Ресурс и обработка документов политики были хорошими и гладкими, поэтому моя идея состояла в том, чтобы воссоздать все это в C # для этого проекта.

Шаг 3: положить его в действие

Поскольку платформа разработана в C #, мне пришлось преобразовать прототип в C #. Я построил объект ресурса авторизации в каждую модель и добавил центральный метод проверки авторизации на отдельных объектах. Я также хотел получить списки, фильтрованные авторизациями.

Шаг 4: учащиеся

Решение оказалось удивительно эффективным, поскольку теперь мы можем писать политики практически любым желаемым эффектом. Мы можем скрыть предметы вообще, от определенных пользователей только скрыть только их детали и т. Д. Полная мощность регулярных выражений делает этот инструмент очень гибким и еще довольно простым в использовании. Он использует только стандартные библиотечные вещи, которые доступны практически на любом языке программирования. Очень важно использовать правильное кэширование скомпилированных заявлений Regex для поддержания производительности. Этого достаточно, чтобы очистить авторизацию пользователя из кэша всякий раз, когда пользовательская политика изменяется или прошел предварительно определенное количество времени.

Оригинал: “https://dev.to/gaborschulz/to-allow-or-not-to-allow-that-is-the-question-1j65”