Spring Boot 2 и Keycloak Authorization: реализация простого REST API - PullRequest
0 голосов
/ 15 ноября 2018

Я использую 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: write и т. д. ...

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

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 22 февраля 2019

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

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

0 голосов
/ 18 ноября 2018

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

/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.

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

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

...