Разоблачение API в монолитном Jhipster APP с базовой безопасностью OAUTH2

Кто-нибудь может мне помочь?

Я создал монолитное приложение Jhipster, используя Security на основе Keycloak. Этот ключевой доступ к моему корпоративному ldap и все работает отлично. Когда кому-то нужна страница, она перенаправляется на http://localhost:8080/login и перенаправляется на keycloak для пения in, он возвращается на http://localhost:8080/login и получает токен пользователя, вошедшего в систему, поэтому пользователь может получить доступ к базе на основе разрешений пользователя роли.

Теперь мы хотим предоставить API сторонним компаниям, чтобы повторно использовать бизнес-логику моего приложения. (мы можем сделать это с помощью веб-сервисов, но мы хотим открыть наш спокойный API). У них есть свои собственные приложения (настольные, веб-приложения и т. д.), и мы хотим предоставить доступ к нашему API, чтобы они могли общаться с нами с помощью тех же политик безопасности. у них есть пользователи в нашем ldap. может ли кто-нибудь сказать мне, как лучше всего открыть его с разрешениями роли пользователя.

Один из способов заключается в том, что они могут отправить нам свои данные для входа (пользователь, пароль). Мы знаем, что это не лучший путь, но мы не знаем, как поступить иначе. Кто-нибудь знает, как войти в систему с помощью keycloak на основе этого имени пользователя. Мы включили прямое соединение и можем получить токен доступа Keycloak с потоком паролей. Но если мы поступим таким образом, как мы можем преобразовать этот токен в объект OAuth2Authentication, чтобы мы могли сгенерировать JSESSIONID для выполнения вызовов API?

Мы отключили csrf, чтобы сделать это возможным.

Любые идеи?

заранее спасибо


person Jose Mato    schedule 06.06.2018    source источник


Ответы (1)


После нескольких дней исследований я нашел решение.

Вот код:

@Конфигурация

@EnableResourceServer

открытый класс ResourceServerConfiguration расширяет ResourceServerConfigurerAdapter {

@Bean("resourceServerRequestMatcher")
public RequestMatcher resources() {
    return new AntPathRequestMatcher("/external-access/**");
}

@Override
public void configure(final HttpSecurity http) throws Exception {
    http
        .requestMatcher(resources()).authorizeRequests()
        .anyRequest().authenticated();

}

}

Таким образом, у меня есть как WebSecurity, основанный на Keycloak, так и на базе ресурсов потока паролей. Для этого решения API, который я хочу предоставить, имеет оба сопоставления /api /external-api, первое для веб-навигации, а другое — для прямого доступа. Чтобы получить доступ вторым способом, вам нужно сначала вызвать keycloak, чтобы получить токен, а затем получить доступ к /external-api с этим токеном.

Возможно, есть лучшее решение (учетные данные клиента), но мне нужно, чтобы пользователь входа в систему повторно использовал мои конечные точки.

person Jose Mato    schedule 19.06.2018