|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Доброго времени суток! Есть сущность Право - которое может быть назначено как напрямую пользователю, так и ролям, в составе которых находятся пользователи. Проект классический spring + spring-security версии 5.1.5 Подключил UserDetailService, хотел использовать аннотацию preauthorize hasauthority - но она проверяет только то, что аутентифицированный пользователь должен входить в заявленную роль, в значении hasauthority Что использовать, если необходимо проверять доступ к отдельному сервису, как вхождением в роль, так и обладанием определенного права, как в составе отдельной роли, так и напрямую? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 00:07 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Aghial Что использовать, если необходимо проверять доступ к отдельному сервису, как вхождением в роль, так и обладанием определенного права, как в составе отдельной роли, так и напрямую? Oauth 2 протокол вполне с этим справляется через связку client>user>scope https://oauth.net/2/ ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 02:19 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Aghialаутентифицированный пользователь должен входить в заявленную роль имхо не входить в заявленную роль, а как раз таки обладать определенным "правом". это важная разница - можно просто грузить и возвращать в UserDetails.getAuthorities() все права которыми он обладает напрямую или через вхождение в группы (роли) скопом. Ну а если нужно давать доступ куда-то по факту вхождения в какую-то группу (а нужно ли если можно определить для группы какое-то особое право?), то можно использовать кастомный код/функции для проверки в PreAuthorize и даже создавать новый аннотации на его основе для переиспользования ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:23 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
AghialЕсть сущность Право - которое может быть назначено как напрямую пользователю, так и ролям, в составе которых находятся пользователи. пример приведите. Большие подозрения, что пишите какой то изврат. Чем отличается Право назначенное пользователю от роли ? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 10:26 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123, Пример: Пользователь1, Пользователь2 Роль1, Роль2 Пользователь 1 входит в состав Роль1 Право1(доступ к очень важной информации) выдано Роль1 и Пользователь2 (так как этот пользователь очень важный, или существует в единственном экземпляре и не хотелось бы придумывать ему отдельную Роль, и должен иметь доступ только к этому праву) В итоге нужна аннотация на рест сервис, которая содержит Право1, и доступ к этому сервису должны получить как Пользователь1 (так как у него есть Роль1), так и Пользователь2 (так как он имеет доступ к Праву1) Технически, это три сущности (Пользователь, Роль, Право) И две таблицы ПользовательРоль (связь многие ко многим, так как у пользователя может быть несколько ролей, так и роль может принадлежать многим пользователям) и таблица ПравоМаппинг (в которой связь ПравоРольПользователь многие ко многим) Понятно, что если бы не нужно быль выдавать права отдельным пользователям, минуя роли - то это можно было бы сделать через hasAnyAuthority Интересовало, можно ли это сделать стандартными средствами spring security Сейчас пытаюсь понять подойдет ли hasPermission ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 18:50 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Sergunka, Спасибо за ответ! К сожалению этот рецепт не подойдет в моей конкретной ситуации ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 18:50 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
chpasha, Смысл отдельных прав - возможность гибкой кастомизации 1 Право - по сути - доступ к одному рест-сервису - доступ к отдельной, конкретной функциональности. И можно этим гибко управлять выдавая как отдельным ролям этом право, так и напрямую пользователю (по количеству ролей тоже есть ограничение и нельзя их плодить без веской на это причины) Я собственно реализовал это через кастомную аннотацию, без использования spring security (тут еще допущение, что пользователь - приходит уже аутентифицированным (через заголовок http запроса)), и эта аннотация проверяла запрос на валидность, по заголовку пользователя определяла - есть ли у пользователя такое-то право напрямую или через роль - и давала доступ или отменяла его. На что мне указали - что стоит рассмотреть использование spring security - и я пытаюсь понять возможно ли это сделать из коробки, ну и попутно разбираюсь с технологией ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 18:59 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
AghialПользователь1, Пользователь2 Роль1, Роль2 Пользователь 1 входит в состав Роль1 === ему назначена роль https://ru.wikipedia.org/wiki/Управление_доступом_на_основе_ролей Право1(доступ к очень важной информации) ==== почему не сделать CREATE ROLE TOP_SECRET1 Чем не подходит? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 19:08 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Aghialchpasha, Смысл отдельных прав - возможность гибкой кастомизации 1 Право - по сути - доступ к одному рест-сервису вот оно что. Ты перепутал или свелосипедил Мандатную модель управления доступом. Там секретность ставится на ресурс . А в системе ролей этого нету. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 19:11 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Aghialиз коробкимандатная из коробки в Оси Астра линукс производство РФ ))) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 19:12 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
AghialСмысл отдельных прав - возможность гибкой кастомизации мне понятен смысл отдельных прав Aghialя пытаюсь понять возможно ли это сделать из коробки, ну и попутно разбираюсь с технологией так как ты это описал - вообще никаких проблем. нужно просто выгрести запросом все права, которые пользователь имеет напрямую и через членство в группах (ролях). В чем проблема? А дальше везде только на права и проверяешь. Мне кажется тут имеет место путаница в понятиях, особенно потому что в спринге по умолчанию все "права" имеют префикс ROLE_XXX но это именно что права, а не роли (группы) - по крайней мере конкретно в твоем случае (префикс кстати поменять можно) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 19:12 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
chpashaно это именно что права, а не роли (группы)там нет наследования ролей? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 19:15 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
https://astralinux.ru/products/astra-linux-common-edition/ Вообще мне кажется надо идти от заказчика. И посмотреть какая схема авторизации т.е. кто выступает в качестве IdP (Identity Provider). Что там под капотом SAML, LDAP, OAuth2 или свой протокол? Задача сама по себе очень интересная судя по тому какая в целом каша в индустрии. У меня как раз период вопросов по секьюрити я бы с удовольствием посмотрел может бы чего подсказал. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 21:28 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123там нет наследования ролей? что есть наследование ролей? типа роль админ - наследник роли юзер или как? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.04.2019, 22:30 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123, Свелосипедил)) Да и, имхо, - это лежит на поверхности Создавать отдельную роль TOP_SECRET_ROLE - не хочется, так как по сути есть штатно зафиксированный состав ролей, и создавать роль для одного права - не хотелось Хотя, конечно, я прихожу к выводу что это правильно - и не стоит использовать хак с выдачей permission помимо роли И спасибо за ссылки на MAC и RBAC - так понятнее ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:09 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
chpasha, Да я собственно так и сделал в какой-то момент, выгреб все права и проверял их наличие в hasAuthority. Вот только в режиме дебага - там были не права, а роли с префиксом ROLE_, немного не те данные и это смутило Спасибо, вроде бы более менее возникло понимание, буду пробовать ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:11 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
chpashaPetro123там нет наследования ролей? что есть наследование ролей? типа роль админ - наследник роли юзер или как?в оракле в ide прямо видно дерево. Очень удобно. Можно сделать внизу мелкие, а вверху обобщенные (НАЧАЛЬНИК управления). И одной строкой навешать на любого юзверя. USER petro SET ROLE super_owner ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:22 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Sergunka, Аутентификация на основе утверждений. MS перешел недавно. Как раз для веб. https://stackoverflow.com/questions/6786887/explain-claims-based-authentication-to-a-5-year-old ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:29 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123в оракле в ide прямо видно дерево. Очень удобно. дело в том что спрингу все равно - у спрингового юзера линейный список предоставленных полномочий, по сути это просто коллекция строк (за фасадом интерфейса GrantedAuthority) . Загружай его как хош, из дерева, из файла, хоть как. И организуй тоже как хош. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 10:56 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
chpasha, Такое можно? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 11:05 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123Такое можно? можно ... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 11:40 |
|
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
|
|||
---|---|---|---|
#18+
Petro123chpasha, Такое можно? Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
Я-бы развернул на 90 градусов так. +Еще есть специальные литералы для булевых и пустых значений. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
26.04.2019, 12:25 |
|
|
start [/forum/topic.php?fid=59&fpage=28&tid=2121339]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
59ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 279ms |
total: | 438ms |
0 / 0 |