Spring Security разрешает запросы из всех источников локально, но блокирует мое приложение Angular при развертывании в CJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Spring Security разрешает запросы из всех источников локально, но блокирует мое приложение Angular при развертывании в C

Сообщение Anonymous »

У меня возникла проблема с конфигурацией Spring Security CORS. Я тестирую свой API локально с несколькими профилями и развернул API и приложение Angular в Cloud Run (в разных проектах GCP).
Я наблюдаю различное поведение локально и . в облаке, и я не могу понять, почему.
Что происходит:
  • Локально: когда я тестирую Spring Boot API с моим приложением Angular, используя
    прокси (proxy.dev.conf.json или proxy.prod.conf.json). ), все работает
    отлично. Однако конечная точка /public/cars доступна из любого
    источника, даже если я установил определенные разрешенные источники в Spring
    Security.
  • Развертывание Cloud Run. Когда я развертываю приложение Angular и API,
    Потому что оно пытается получить доступ к маршруту Angular вместо связи с API! Однако, если я получаю доступ к API напрямую из браузера
    (без использования Angular), я все равно могу попасть в конечную точку /public/cars
    и получить данные, даже если источник должен быть заблокирован.
Моя конфигурация безопасности Spring:

Код: Выделить всё

@Configuration
@EnableWebSecurity
@Slf4j
public class SecurityConfig {

@Value("${allowed.origins}")
private String allowedOrigins;

@Bean
public SecurityFilterChain apiFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.cors(httpSecurityCorsConfigurer -> httpSecurityCorsConfigurer.configurationSource(corsConfigurationSource()))
.authorizeHttpRequests(
authorize -> authorize
.requestMatchers("/swagger-ui/**", "/v3/api-docs/**", "/swagger-ui.html").permitAll()
.requestMatchers("/public","/public/**").permitAll()  // Public endpoints
.anyRequest().authenticated()
)
.sessionManagement(sessionManagement -> sessionManagement.sessionCreationPolicy(SessionCreationPolicy.STATELESS));

return http.build();
}

@Bean
CorsConfigurationSource corsConfigurationSource() {
log.info("allowed origins : {}", allowedOrigins);
CorsConfiguration configuration = new CorsConfiguration();
configuration.setAllowedOrigins(List.of(allowedOrigins));
configuration.setAllowedHeaders(List.of("X-API-KEY", "Content-Type", "Authorization", "Cache-Control"));
configuration.setExposedHeaders(List.of("X-Rate-Limit-Remaining", "X-Rate-Limit-Retry-After-Seconds", "Cache-Control", "Content-Type", "Access-Control-Expose-Headers", "Access-Control-Allow-Origin"));
configuration.setAllowedMethods(List.of("GET", "POST", "DELETE", "PUT"));
UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
source.registerCorsConfiguration("/**", configuration);
return source;
}

}
Моя конфигурация прокси Angular:

Код: Выделить всё

// proxy.dev.conf.json:

{
"/api": {
"target": "https://api.testcars.com",
"secure": false,
"changeOrigin": false,
"pathRewrite": {
"^/api": ""
}
}
}
Что я вижу:
  • Локально< /strong>: я могу получить доступ к /public/cars из любого источника, даже если я
    указал разрешенные источники в Spring Security.
  • Cloud Run (развернуто):
    Приложение Angular: Приложение не может обмениваться данными с API из-за
    ошибок CORS.
    Прямой доступ к API (через браузер): я могу перейти к развернутому API
    и получайте ответы от /public/cars без проблем с CORS, даже если
    источник запрещен.
Вопросы:
  • Почему я могу получить доступ к /public/cars из любого источника локально, хотя
    Я установил разрешенные источники в Spring Security?
  • Почему мое приложение Angular не может взаимодействовать с API, когда оба
    развернуты в Cloud Run?
  • Почему я могу напрямую получить доступ к API из браузера а не
    через приложение Angular?


Подробнее здесь: https://stackoverflow.com/questions/790 ... my-angular
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»