#spring-security #oauth-2.0 #vaadin #spring-security-oauth2
#spring-security #oauth-2.0 #vaadin #spring-security-oauth2
Вопрос:
Поток кода авторизации Oauth2 определяет роли, как они показаны в верхней части следующего рисунка.
У меня уже есть клиентское приложение, написанное с Spring security и несколькими серверами ресурсов. Возможно ли, чтобы приложение Vaadin действовало только как агент пользователя? Т.е. у вас есть одно java-приложение, которое обслуживает интерфейс Vaadin, но передает запросы на вход в другое клиентское приложение, написанное на java с spring security (или любая другая программа, совместимая с oauth2, если на то пошло)? Я думаю, читал, что выгодно разделить интерфейс и серверную часть. Sofar Я нашел только учебные пособия, которые настраивают приложение java vaadin в качестве клиентского приложения. Т.е. Что-то вроде этого в applicaiton.yaml
spring:
security:
oauth2:
client:
registration:
keycloak:
client-id:
client-secret:
authorization-grant-type: authorization_code
redirect-uri: "{baseUrl}/login/oauth2/code/{registrationId}"
scope:
provider:
keycloak:
issuerUri:
И такая конфигурация безопасности
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
public void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/index.html", "/", "/login").permitAll()
.anyRequest().authenticated()
.and()
.oauth2Client()
.and()
.oauth2Login();
}
}
В качестве альтернативы:
Возможно ли, чтобы сервер ресурсов отправлял запросы API на другой сервер ресурсов? Т.е. Настройте экземпляр веб-клиента / oauth2Client, который может выполнять авторизованные запросы rest?
Комментарии:
1. Я не могу понять это предложение
Is it posible for a Vaadin app to only act as the UserAgent?
, вы хотите создать часть пользовательского интерфейса аутентификации в своем решении с помощью Vaadin?2. Что касается этого
Is it possible for a resource server to make API requests to another resource server?
: я могу сказать, что это зависит от вашей архитектуры. В микросервисной архитектуре каждая служба регистрирует себя в реестре, и другие службы могут найти ее через реестр. Я думаю, что чтение об архитектуре микросервисов может быть полезным.3. Так много приложений никогда не достигнут той точки, когда им нужно будет отделить пользовательский интерфейс от серверной части, по сути, отдельной кодовой базы и отдельного развертывания для огромных целей кластеризации и балансировки нагрузки, и выгода от такого разделения может стоить или не стоить решения других проблем, которые он поднимает.
4. Первый комментарий: Я не хочу самостоятельно реализовывать пользовательский интерфейс аутентификации. Я хочу, чтобы приложение vaadin действовало так, как если бы оно было «просто интерфейсом, как angular». т. е. Не получать код аутентификации и обменивать его на коды доступа, но передавать код аутентификации в мое существующее java-приложение. Второе и третье: я читал об архитектуре микросервисов, но подумал, что это излишество, как вы говорите в третьем комментарии, но, возможно, это именно то, что я хочу. Но, может быть, пока достаточно не разделять интерфейс и серверную часть. Спасибо
Ответ №1:
Если вы пытаетесь отделить пользовательский интерфейс от серверной части с помощью отдельной кодовой базы и отдельного развертывания для целей огромной кластеризации и балансировки нагрузки, вы можете рассмотреть микросервисную архитектуру.
В микросервисной архитектуре каждая служба (включая службу OAuth и, возможно, сам пользовательский интерфейс) регистрируется в реестре служб, поэтому другие службы могут находить и вызывать друг друга через этот реестр. Это очень абстрактное объяснение и для реализации таких архитектур, и вам следует углубиться в детали.
Так много приложений никогда не достигнут той точки, когда им нужно отделить пользовательский интерфейс от серверной части, и выгода от этого разделения может стоить или не стоить решения других проблем, которые оно вызывает.
В любом случае, Vaadin Fusion недавно был представлен в качестве альтернативы чистой версии Java (или версии шаблона Java HTML) для создания приложений пользовательского интерфейса с помощью Typescript и HTML. Таким образом, пользовательский интерфейс полностью находится в браузере, чем-то похожем на Vue, Angular и React.
Хотя Vaadin Fusion разработан таким образом, что может автоматически подключаться к внутренним службам в рамках одного проекта, я полагаю, вы можете делать то, что хотите, применяя некоторые настройки для вызова других внутренних служб (таких как OAuth или ваши существующие java-приложения). Однако вам следует иметь дело с некоторыми другими проблемами, такими как обработка CORS или пользовательских сеансов и т. Д. (Которые также являются существующими проблемами при использовании других интерфейсных фреймворков и библиотек).
Вы можете узнать больше о Vaadin Fusion здесь . Для быстрого начала вы также можете посмотреть это короткое видео.