Keycloak: защищать веб-сервис jax-rs EJB с помощью области действия на Wildfly - PullRequest
0 голосов
/ 27 марта 2020

У меня есть EAR.

В нем много модулей EJB с большим количеством EJB.

Каждый EJB содержит множество веб-сервисов, некоторые с общим интерфейсом, некоторые специфицируются c для EJB.

Мне нужно защитить свои остальные вызовы токеном и использовать некоторое разрешение области.

Например, у меня есть EJB, управляющий корзиной покупок:

@Stateless(name = "ServiceCart")
@Path(value = "cart")
public class ServiceCart implements ServiceInterface {

  @Path(value = "/{id}")
  @GET
  @Produces(value = {MediaType.APPLICATION_JSON})
  public Cart getRecord(@PathParam(value = "id") Long id){
    Cart c = new Cart(id, "TEST00001", "Joe Doe");
    return c;
}

@Path(value = "/delete/{id}")
@GET
@Produces(value = {MediaType.APPLICATION_JSON})
public String deleteRecord(@PathParam(value = "id") Long id){
    return "Deleted id {0}";
}

}

Веб-сервис защищен логином. Чтобы разрешить доступ, я должен создать RESOURCE под названием «CartModule», защищающий URL «/ api / cart / *», политику под названием «role_customer» с правилом role = CUSTOMER ".

Я создаю роль-разрешения " CartCustomer ", в которой CartModule выбирается в качестве ресурса, а" role_customer "в качестве политики. Теперь, если клиент звонит в службу, звонки разрешены.

Хорошо, методы защищены логином.

Теперь мне нужно, чтобы пользователь не удалил корзину покупок, поэтому я создаю Область авторизации ПРОЧИТАЙТЕ и УДАЛИТЕ и добавила его в CartModule.

Я изменил разрешение на scope-разрешение с ресурсом = CartModule, policy = role_customer и только scope READ.

Как я могу сказать keycloak, что первый метод - "READ", а другой - "DELETE"? Даже если я создаю это разрешение, все методы будут разрешены.

Другая проблема:

У меня много EJB (около 60), один для jpa-entity с как минимум 10 веб-службами каждый, поэтому я не могу создать ресурс для каждого отдельного вызова и каждой роли. Другой вопрос, я не могу доверять звонку клиента для получения объема

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...