Как создать динамическую защиту маршрутов API с помощью крупномасштабных систем и распределенных серверов?JAVA

Программисты JAVA общаются здесь
Ответить Пред. темаСлед. тема
Anonymous
 Как создать динамическую защиту маршрутов API с помощью крупномасштабных систем и распределенных серверов?

Сообщение Anonymous »

У нас уже есть система, в которой серверная часть использует Spring, а внешний интерфейс — Angular. Мы группируем определенные страницы по функциям, что позволяет администратору динамически назначать доступ к этим функциям на основе ролей. В настоящее время мы используем ResourceServerConfigurerAdapter с методом .antMatchers("url").hasAnyAuthority(access1, access2) для управления доступом к API для целых контроллеров. Однако этот подход требует ручного обновления ResourceServerConfigurerAdapter каждый раз, когда функция полностью удаляется. Поскольку этот файл в первую очередь предназначен для конфигураций безопасности, мы часто пропускаем его обновление при удалении доступа к функции, поскольку это потребует повторного развертывания. Такая практика громоздка, подвержена ошибкам и оставляет API для удаленных функций неоправданно открытыми для определенных ролей.
Чтобы решить эту проблему, нам нужна динамическая реализация, в которой доступ к API ограничен активно используемыми функциями.
Вопрос-1: Мы нашли подход, упомянутый ниже, но он громоздкий, подвержен ошибкам и требует много времени, поэтому нам нужно знать, есть ли какая-либо альтернатива этому подходу.
Существующий подход:
У нас есть таблица функций, в которой мы храним угловые URL-адреса, связанные с этой функцией, в столбце URLS и API контроллера в столбце APIS, как указано ниже:

Настройка базы данных:

  • Таблица сопоставления функций и API:

Код: Выделить всё

    FeatureID | FeatureName      | Code  | URLS                       | APIS
----------|------------------|-------|----------------------------|------------------------------
1         | UserManagement   | UM    | /user/create,/user/update  | /api/user/create,/api/user/update
2         | ProductCatalog   | PC    | /product/view,/product/edit| /api/product/view,/api/product/edit
Теперь мы извлекаем данные из таблицы объектов на карте, ее json указан ниже:

Кэшированная структура:

  • Кеш хранит сопоставление как:

Код: Выделить всё

    {
"Admin": [
{
"code": "UM",
"urls": ["/user/create", "/user/update"],
"apis": ["/api/user/create", "/api/user/update"]
},
{
"code": "PC",
"urls": ["/product/view", "/product/edit"],
"apis": ["/api/product/view", "/api/product/edit"]
}
],
"User": [
{
"code": "PC",
"urls": ["/product/view"],
"apis": ["/api/product/view"]
}
]
}
  • Внешний интерфейс:
    • Журналы пользователей в зависимости от их роли (например, «Администратор») система выбирает соответствующие функции и их URL-адреса для динамической защиты маршрутов.
  • Бэкенд:
    • Когда делается запрос к /api/user/create с /user/create в заголовке:

      Бэкэнд извлекает роль из сеанса (например, «Администратор»).
    • Он извлекает список FeatureApisUrlsDto для «Администратора» из кеша.
    • Он перебирает список, соответствующий URL-адресу (

      Код: Выделить всё

      /user/create
      ) с функцией и проверяет, доступен ли API (

      Код: Выделить всё

      /api/user/create
      ) разрешено.



    Постановка проблемы:
    • Опрос к базе данных для каждого запроса API требует больших затрат, поэтому мы кэшируем карта API локальна на каждом сервере.
    • Мы работаем в распределенной серверной среде без централизованного кэширования, поэтому обновляйте кеш каждые 5 минут.
    • Этот подход работает, но имеет ограничения:

      При частых обновлениях кеша могут быть пропущены немедленные изменения в разрешениях. .
    • Проблемы с масштабируемостью из-за большого количества API.

    Вопросы:
  • Есть ли лучший способ динамического управления API в такой системе с минимальными изменениями в существующей архитектуре?
  • Если мы продолжим использовать этот подход:
    • Что лучше хранить — конечные точки API в базе данных или файл JSON в системе (вместе с кодами функций)?
    • Как мы можем обеспечить синхронизацию между распределенные серверы без реализации централизованного кэша?
Ограничения:
  • У нас есть значительное количество API и функций.
  • Мы хотим свести к минимуму изменения в существующей системе.
    На данный момент мы не можем реализовать централизованное кэширование.< /li>
Я ценю любые предложения и рекомендации.

Подробнее здесь: https://stackoverflow.com/questions/793 ... d-distribu
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «JAVA»