2

Я создаю облачные приложения, используя весну, весеннюю безопасность, спящий режим и Oauth.Схема оформления подписки: Весна

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

  • Клиент должен выбрать пакеты (серебро, золото, ..) при подключении для каждого продукта

  • Пакет будет иметь модули подробности и нет пользователей разрешено для каждого пользователя продукта и клиента будет возможность доступа только к модулям (выбранному пакету), к клиенту которых принадлежит , и к ним пользователь имеет доступ.

Мне нужно создать Rest Api для каждой функциональности.

Проблема: Я использую Spring oauth2 для защиты моего API по таким только зарегистрированным клиентам и их пользователи могут получить доступ к ним, но они могут получить доступ к .I всех API должен позволить клиентам получить доступ только те API, которые он имеет доступ к/подписанный. Как я могу достичь этого весной?

В настоящее время я планирую использовать inteceptors, но это сильно зависит от шаблона URL. Таким образом, для каждого продукта и модуля я будет иметь разные перехватчик

URL шаблона: http://abc/rest/ПРОДУКТ/МОДУЛЬ/..

Есть ли лучший способ это осуществить?

ответ

4

Вы можете выбрать другой способ, который может быть лучше, поскольку вам не нужно писать собственные перехватчики URL.

Вы можете использовать Spring Security с его @Secured({"ROLE"}) или @PreAuthorize аннотациями, для которых вы можете создавать роли для каждого продукта, и вы предоставляете клиентам роли, для которых они подписались. Вы можете найти дополнительную информацию об этой аннотации и о том, как она работает here.

Для работы @Secured и @PreAuthorize для работы вам необходимо иметь аннотацию @EnableGlobalMethodSecurity в классе контекста Spring Boot.

Надеюсь, это поможет.

+0

благодарит за ответ. Пожалуйста, проверьте, что я редактировал вопрос. что, если продукты являются разными приложениями на разных серверах (сервер ресурсов). Как поможет @Secured? У меня есть несколько пользователей внутри клиентов. Должен ли я назначать им доступ? –

+0

Вы используете микросервисную архитектуру? Это зависит от вашей архитектуры, но в конечном итоге каждый зарегистрированный пользователь должен получить соответствующие роли (от клиента, которому они назначены). –

+0

Да, это архитектура микросервиса. жаль, что я относительно новичок в весенней и весенней безопасности. Я понимаю, что мы можем реализовать то, что вы предложили. Но я хочу ограничить доступ на уровне продукта и уровне модуля.должен ли я создавать роли для каждого модуля? И пользователь может иметь доступ к нескольким модулям. поэтому каждый раз, когда клиент каждый раз подписывается на новый продукт, у меня есть роли для пользователя справа ?. Также пользователь аутентифицируется с использованием маркера Ouath. как я получу пользовательский доступ с токена Oauth? –