Я хотел бы развернуть приложение Angular независимо от моего бэкэнда Spring-Boot, который обрабатывает процесс входа в систему oauth2/oidc. Локальная установка выглядит так
angular (localhost: 4200, localhost: 4300) <-> серверная часть весенней загрузки (localhost: 8080) <-> сервер моей компании oauth2/oidc
Если приложение angular упаковано с бэкэндом в jar Spring-Boot, все работает правильно, поскольку и бэкэнд, и интерфейс находятся на одном и том же URL-адресе (localhost:8080). Но когда я запускаю много угловых приложений на разных портах и хочу выполнить аутентификацию через серверную часть, у меня возникает проблема с перенаправлением после входа в систему. В основном серверная часть перенаправляется на «/» (в моем случае это localhost: 8080), но я хочу перенаправить на URL-адрес приложения angular (localhost: 4200 или localhost: 4300). Я нашел обходной путь, установив oauth2.defaultSuccessUrl.
@Bean
public SecurityFilterChain filterChain(HttpSecurity http) throws Exception {
...
return http.authorizeHttpRequests((auth) ->
{
auth.requestMatchers("/public/**").permitAll();
auth.anyRequest().authenticated();
}).requestCache(cache -> cache.requestCache(requestCache)).cors(Customizer.withDefaults()).csrf(AbstractHttpConfigurer::disable).oauth2Login(oauth2 ->
{
oauth2.defaultSuccessUrl("/api/login");
...
}).build();
}
и создание конечной точки перенаправления /api/login
@GetMapping("/api/login")
public void login(HttpServletResponse response) throws IOException {
response.sendRedirect("http://localhost:4200");
}
но таким образом я могу обрабатывать только один экземпляр углового приложения.
Есть ли способ обрабатывать множество интерфейсных приложений с помощью одного бэкэнда с пружинной загрузкой, который обрабатывает процесс oauth2/oidc?





Вот как я действую:
X-POST-LOGIN-SUCCESS-URIв моем случае ) или параметре (post_login_success_uri в моем случае) запроса, инициирующего вход в систему (тот, который находится в /oauth2/authorization/{registration-id} )(Server)OAuth2AuthorizationRequestResolver на клиенте Spring OAuth2, настроенный с помощью oauth2Login, сохраняет этот URL-адрес в сеансе(Server)AuthenticationSuccessHandler ищет сохраненный URL-адрес в сеансе, и если находит, использует его вместо URL-адреса по умолчанию.Все это доступно на maven-central как часть Spring-addons-starter-oidc.
Вы можете попробовать это с помощью сопутствующего проекта этой статьи, которую я написал. Три интерфейса (Angular, React и Vue) используют этот механизм для аутентификации пользователей на одном и том же сервере OAuth2 BFF и авторизации, а затем возвращаются к нужному интерфейсу.
Отключение защиты CSRF на клиенте Spring OAuth2 с помощью oauth2Login является огромным нарушением безопасности: запросы к такому бэкэнду авторизуются с помощью сеанса, который является вектором для атак CSRF.
Я удивлен, что мой ответ даже не оказался полезным.