powered by simpleCommunicator - 2.0.49     © 2025 Programmizd 02
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
22 сообщений из 22, страница 1 из 1
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39805937
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток!

Есть сущность Право - которое может быть назначено как напрямую пользователю, так и ролям, в составе которых находятся пользователи.

Проект классический spring + spring-security версии 5.1.5
Подключил UserDetailService, хотел использовать аннотацию preauthorize hasauthority - но она проверяет только то, что аутентифицированный пользователь должен входить в заявленную роль, в значении hasauthority

Что использовать, если необходимо проверять доступ к отдельному сервису, как вхождением в роль, так и обладанием определенного права, как в составе отдельной роли, так и напрямую?
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39805948
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghial
Что использовать, если необходимо проверять доступ к отдельному сервису, как вхождением в роль, так и обладанием определенного права, как в составе отдельной роли, так и напрямую?

Oauth 2 протокол вполне с этим справляется через связку client>user>scope
https://oauth.net/2/
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806034
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghialаутентифицированный пользователь должен входить в заявленную роль
имхо не входить в заявленную роль, а как раз таки обладать определенным "правом". это важная разница - можно просто грузить и возвращать в UserDetails.getAuthorities() все права которыми он обладает напрямую или через вхождение в группы (роли) скопом. Ну а если нужно давать доступ куда-то по факту вхождения в какую-то группу (а нужно ли если можно определить для группы какое-то особое право?), то можно использовать кастомный код/функции для проверки в PreAuthorize и даже создавать новый аннотации на его основе для переиспользования
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806038
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AghialЕсть сущность Право - которое может быть назначено как напрямую пользователю, так и ролям, в составе которых находятся пользователи.
пример приведите.
Большие подозрения, что пишите какой то изврат.
Чем отличается Право назначенное пользователю от роли ?
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806473
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Пример:

Пользователь1, Пользователь2
Роль1, Роль2
Пользователь 1 входит в состав Роль1
Право1(доступ к очень важной информации) выдано Роль1 и Пользователь2 (так как этот пользователь очень важный, или существует в единственном экземпляре и не хотелось бы придумывать ему отдельную Роль, и должен иметь доступ только к этому праву)

В итоге нужна аннотация на рест сервис, которая содержит Право1, и доступ к этому сервису должны получить как Пользователь1 (так как у него есть Роль1), так и Пользователь2 (так как он имеет доступ к Праву1)

Технически, это три сущности (Пользователь, Роль, Право)
И две таблицы ПользовательРоль (связь многие ко многим, так как у пользователя может быть несколько ролей, так и роль может принадлежать многим пользователям) и таблица ПравоМаппинг (в которой связь ПравоРольПользователь многие ко многим)

Понятно, что если бы не нужно быль выдавать права отдельным пользователям, минуя роли - то это можно было бы сделать через hasAnyAuthority

Интересовало, можно ли это сделать стандартными средствами spring security
Сейчас пытаюсь понять подойдет ли hasPermission
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806475
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Sergunka,

Спасибо за ответ!
К сожалению этот рецепт не подойдет в моей конкретной ситуации
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806479
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,

Смысл отдельных прав - возможность гибкой кастомизации
1 Право - по сути - доступ к одному рест-сервису - доступ к отдельной, конкретной функциональности. И можно этим гибко управлять выдавая как отдельным ролям этом право, так и напрямую пользователю (по количеству ролей тоже есть ограничение и нельзя их плодить без веской на это причины)

Я собственно реализовал это через кастомную аннотацию, без использования spring security
(тут еще допущение, что пользователь - приходит уже аутентифицированным (через заголовок http запроса)), и эта аннотация проверяла запрос на валидность, по заголовку пользователя определяла - есть ли у пользователя такое-то право напрямую или через роль - и давала доступ или отменяла его.
На что мне указали - что стоит рассмотреть использование spring security - и я пытаюсь понять возможно ли это сделать из коробки, ну и попутно разбираюсь с технологией
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806482
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AghialПользователь1, Пользователь2
Роль1, Роль2
Пользователь 1 входит в состав Роль1
=== ему назначена роль
https://ru.wikipedia.org/wiki/Управление_доступом_на_основе_ролей

Право1(доступ к очень важной информации)
==== почему не сделать CREATE ROLE TOP_SECRET1

Чем не подходит?
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806483
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghialchpasha,

Смысл отдельных прав - возможность гибкой кастомизации
1 Право - по сути - доступ к одному рест-сервису
вот оно что.
Ты перепутал или свелосипедил Мандатную модель управления доступом.
Там секретность ставится на ресурс . А в системе ролей этого нету.
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806484
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Aghialиз коробкимандатная из коробки в Оси Астра линукс производство РФ )))
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806485
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AghialСмысл отдельных прав - возможность гибкой кастомизации
мне понятен смысл отдельных прав

Aghialя пытаюсь понять возможно ли это сделать из коробки, ну и попутно разбираюсь с технологией
так как ты это описал - вообще никаких проблем. нужно просто выгрести запросом все права, которые пользователь имеет напрямую и через членство в группах (ролях). В чем проблема? А дальше везде только на права и проверяешь. Мне кажется тут имеет место путаница в понятиях, особенно потому что в спринге по умолчанию все "права" имеют префикс ROLE_XXX но это именно что права, а не роли (группы) - по крайней мере конкретно в твоем случае (префикс кстати поменять можно)
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806486
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaно это именно что права, а не роли (группы)там нет наследования ролей?
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806521
Sergunka
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
https://astralinux.ru/products/astra-linux-common-edition/

Вообще мне кажется надо идти от заказчика. И посмотреть какая схема авторизации т.е. кто выступает в качестве IdP (Identity Provider).

Что там под капотом SAML, LDAP, OAuth2 или свой протокол?

Задача сама по себе очень интересная судя по тому какая в целом каша в индустрии. У меня как раз период вопросов по секьюрити я бы с удовольствием посмотрел может бы чего подсказал.
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806531
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123там нет наследования ролей?
что есть наследование ролей? типа роль админ - наследник роли юзер или как?
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806598
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Petro123,

Свелосипедил)) Да и, имхо, - это лежит на поверхности

Создавать отдельную роль TOP_SECRET_ROLE - не хочется, так как по сути есть штатно зафиксированный состав ролей, и создавать роль для одного права - не хотелось
Хотя, конечно, я прихожу к выводу что это правильно - и не стоит использовать хак с выдачей permission помимо роли

И спасибо за ссылки на MAC и RBAC - так понятнее
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806600
Aghial
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
chpasha,

Да я собственно так и сделал в какой-то момент, выгреб все права и проверял их наличие в hasAuthority.
Вот только в режиме дебага - там были не права, а роли с префиксом ROLE_, немного не те данные и это смутило

Спасибо, вроде бы более менее возникло понимание, буду пробовать
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806607
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpashaPetro123там нет наследования ролей?
что есть наследование ролей? типа роль админ - наследник роли юзер или как?в оракле в ide прямо видно дерево. Очень удобно.
Можно сделать внизу мелкие, а вверху обобщенные (НАЧАЛЬНИК управления).
И одной строкой навешать на любого юзверя.
USER petro SET ROLE super_owner
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806612
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergunka,
Аутентификация на основе утверждений.
MS перешел недавно. Как раз для веб.
https://stackoverflow.com/questions/6786887/explain-claims-based-authentication-to-a-5-year-old
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806630
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123в оракле в ide прямо видно дерево. Очень удобно.
дело в том что спрингу все равно - у спрингового юзера линейный список предоставленных полномочий, по сути это просто коллекция строк (за фасадом интерфейса GrantedAuthority) . Загружай его как хош, из дерева, из файла, хоть как. И организуй тоже как хош.
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806638
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
chpasha,
Такое можно?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
claims : [
    {"type": "name", "value": "Jon Snow"},
    {"type": "home", "value": "Winterfell, The North, Westeros"},   
    {"type": "email", "value": "jon@nightswatch-veterans.org"},
    {"type": "role", "value": "veteran;deserter;"},
    {"type": "department", "value": "none"},    
    {"type": "allowEntry", "value": "true"},
    {"type": "access", "value": "castleblack;eastwatch;"}
]
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806663
chpasha
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123Такое можно?
можно
...
Рейтинг: 0 / 0
Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
    #39806712
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123chpasha,
Такое можно?
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
claims : [
    {"type": "name", "value": "Jon Snow"},
    {"type": "home", "value": "Winterfell, The North, Westeros"},   
    {"type": "email", "value": "jon@nightswatch-veterans.org"},
    {"type": "role", "value": "veteran;deserter;"},
    {"type": "department", "value": "none"},    
    {"type": "allowEntry", "value": "true"},
    {"type": "access", "value": "castleblack;eastwatch;"}
]


Я-бы развернул на 90 градусов так. +Еще есть специальные литералы для булевых и пустых значений.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
claims : {
    "name" : "Jon Snow",
    "home":  "Winterfell, The North, Westeros",   
    "email":  "jon@nightswatch-veterans.org",
    "role":  "veteran;deserter;",
    "department":  null,    
    "allowEntry":  true,
    "access":  "castleblack;eastwatch;"
}
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Spring security - ограничения доступа к REST в разрезе пользователя/группы/права
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]