Spring Boot 2 и авторизация Keycloak: реализация простого REST API

Я использую Spring Boot 2 и Keycloak (keycloak-spring-boot-starter) для реализации REST API. Однако я просто не могу это понять.

Мои ресурсы API выглядят так:

POST / api / a для создания, если предоставлен: write

GET / api / a, чтобы прочитать все, предоставлено: read

GET / api / a / {name} для чтения одного a (если предоставлено: read)

POST / api / a / {name} / b для создания b под a, если предоставлено b: написать и так далее...

Каждый ресурс API должен также получить ResourceRepresentation в Keycloak, поскольку требуется предоставить пользователям доступ на чтение для каждой ресурсной базы. Я планирую использовать для этого группы и назначать пользователей в группы, соответствующие названию ресурса. (например, имя ресурса будет / a1 / b1, что также будет группой, в которую я назначаю пользователей с доступом для чтения)

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

Я пытался всю неделю, но безуспешно. И моя реализация API, и конфигурация Keycloak выглядят как поле битвы. Пример на github слишком упрощен, так как не показывает вложенные ресурсы и корреляцию между HTTP-методами и областями действия.

Как бы вы структурировали

  1. Ваш сервер Keycloak (то есть конфигурация клиента: ресурсы (включая URI), области действия, политики, разрешения; а также: группы, роли)?
  2. Свойство application.properties Spring Boot 2 (для работы с Keycloak Authz)?
  3. Верно ли следующее утверждение: если я правильно настрою свой API (сопоставление путей и методов с областями), я могу полностью контролировать доступ к своим ресурсам с помощью пользователей Keycloak, групп, ролей, политик и разрешений.
  4. Можно ли смешивать конфигурацию-принудитель-политики? Имеется в виду одна часть из application.properties, другая из сервера Keycloak? Объединит ли он все возможные пути? Как будут решаться пути?

как добавить области с ресурсами на стороне приложения? Как будто у меня есть область чтения и записи для ресурсаa

Sriram Gunaseelan 11.01.2019 11:53

Как вы настраиваете ресурсы с областями действия в контроллере?

Siva Thangaraj 11.01.2019 11:55
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
2
508
2

Ответы 2

Концептуально мне пришлось проводить различие между отдельными ресурсами и ресурсами списка:

/buildings/building-1              associated with scopes building:read, building:write, roomS:read, roomS:write
/buildings/building-1/rooms        requires the roomS:read or roomS:write respectively
/buildings/building-1/rooms/room-1 associated with scopes room:read, room:write

Обратите внимание на множественное число в области действия ресурса /rooms.

Кроме того, работает смешанная конфигурация policy-enforcer-config между application.properties и сервером Keycloak: конечные точки сопоставляются с областями в application.properties, а конкретные пути к ресурсам управляются сервером Keycloak.

Надеюсь, это поможет кому-то другому!

Вот конфигурация для обеспечения разрешения на основе области -

keycloak.policy-enforcer-config.paths [1] .path = / api / resourcea keycloak.policy-enforcer-config.paths [1] .scopes = профиль: просмотр, альбом: удалить

Другие вопросы по теме