#kotlin #quarkus #rbac
#kotlin #quarkus #rbac
Вопрос:
В приложении quarkus я хотел бы разработать свой собственный идентификатор безопасности, потому что существующие не соответствуют моим потребностям (мне нужно проверить личность, получив роли из нескольких микросервисов). Возможно, пользовательский идентификатор безопасности — не лучший вариант, но, глядя на документацию, мне кажется, что это то, что мне нужно (другой вариант — определить реализацию ContainerRequestFilter, но это на более низком уровне и менее интегрировано).
Есть ли какой-либо способ сделать это? Я протестировал следующее:
@Provider
@PreMatching
class CustomSecurityIdentity: SecurityIdentity {
override fun getPrincipal(): Principal {
....
Затем из конечной точки я просто определил:
@GET
@Produces(MediaType.APPLICATION_JSON)
@RolesAllowed("administrator")
@Path("/")
fun checkAuth(): Response {
...
Я везде ставлю несколько точек останова, но он никогда не проходит через моего поставщика удостоверений, где @RolesAllowed должен (как я это вижу) принудительно.
Возможно ли заставить его работать?
Комментарии:
1. Я полагаю, что ваш вариант использования, то есть получение ролей из нескольких внешних источников и добавление их к идентификатору, может быть достигнуто путем реализации
SecurityIdentityAugmentor
, как описано здесь: quarkus.io/guides /…2. Я тоже пробовал это, однако он никогда не использовался. Где-то еще я пытался внедрить компонент SecurityIdentity, но quarkus не смог его найти; поэтому я думаю, что в базовой конфигурации не определен SecurityIdentity, поэтому SecurityIdentityAugmentor бесполезен.
3. Понятно, значит
SecurityIdentity
, у вас вообще нет. Насколько я понял из вашего вопроса, вы «только» хотите получать роли из внешних источников. Вопрос в том, нужно ли вам извлекать всю идентификацию из внешних источников, или вам будет достаточно какого-либо встроенного поставщика безопасности, и вам просто нужно будет получить роли? Вероятно, вы можете начать здесь: quarkus.io/guides/security#identity-providers4. @Ladicek насколько я понимаю предоставленную вами ссылку, в ней объясняется, как использовать существующие поставщики удостоверений, но не как создать собственный. Было бы здорово иметь некоторую документацию quarkus о том, как расширение это делает.