JavaRush /Курси /Модуль 5. Spring /Лекція 243: Основні функції API Gateway: маршрутизація, а...

Лекція 243: Основні функції API Gateway: маршрутизація, автентифікація, авторизація

Модуль 5. Spring
Рівень 24 , Лекція 2
Відкрита

API Gateway — це як консьєрж у готелі: він приймає всі запити від зовнішніх користувачів, перевіряє, хто вони, вирішує, куди їх відправити, і відповідає за загальне управління. Це робить API Gateway центральною точкою контролю між клієнтами та мікросервісами. У цій лекції розберемося з основними функціями API Gateway.


Розширені можливості маршрутизації

Маршрутизація API Gateway — це серце його роботи. Вона відповідає за те, щоб запити потрапляли саме до тих мікросервісів, які можуть їх обробити.

Приклад:

Уяви, у тебе є два мікросервіси:

  1. Сервіс управління користувачами (UserService) за адресою http://localhost:8081.
  2. Сервіс замовлень (OrderService) за адресою http://localhost:8082.

Ти хочеш, щоб:

  • Запити на /users/** маршрутизувалися в UserService.
  • Запити на /orders/** — в OrderService.

Налаштуємо це в Spring Cloud Gateway:


@Configuration
public class GatewayConfig {

    @Bean
    public RouteLocator customRouteLocator(RouteLocatorBuilder builder) {
        return builder.routes()
            .route("user_service_route", r -> r.path("/users/**")
                .uri("http://localhost:8081")) // Маршрутизація в UserService
            .route("order_service_route", r -> r.path("/orders/**")
                .uri("http://localhost:8082")) // Маршрутизація в OrderService
            .build();
    }
}

Тепер API Gateway перенаправляє запити залежно від шляху. Це вже круто, але можна зробити більше.


Управління автентифікацією та авторизацією

Автентифікація — це перевірка, хто ти (наприклад, вхід з логіном і паролем). Авторизація — це перевірка, що тобі дозволено робити (наприклад, доступ тільки до певних даних).

API Gateway може виконувати автентифікацію та авторизацію кількома способами:

  1. Перевірка токенів (наприклад, JWT).
  2. Інтеграція з системами OAuth2/SSO.
  3. Збережеш життя твого бекенда, відхиляючи неавторизовані запити ще на рівні API Gateway.

Розширені функції маршрутизації

Для складних сценаріїв маршрутизації API Gateway підтримує предикати і фільтри.

Предикати (Predicates) використовуються для визначення правил маршрутизації. Наприклад:

  • За шляхом (Path): маршрутизуй запити, якщо їхній шлях відповідає /users/**.
  • За HTTP-методом (Method): тільки GET-запити.
  • За хостом (Host): наприклад, запити, що прийшли на api.example.com.

Приклад використання предикатів:


@Bean
public RouteLocator advancedRouteLocator(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("user_service", r -> r
            .path("/users/**")
            .and()
            .method("GET") // Тільки GET-запити
            .uri("http://localhost:8081"))
        .build();
}

Фільтри (Filters) дозволяють обробляти запити і відповіді: модифікувати їх, додавати заголовки, перевіряти параметри і т.д.

Приклад: додамо заголовок до усіх запитів:


@Bean
public RouteLocator routeWithFilters(RouteLocatorBuilder builder) {
    return builder.routes()
        .route("order_service", r -> r
            .path("/orders/**")
            .filters(f -> f.addRequestHeader("X-Request-ID", "12345")) // Додаємо заголовок
            .uri("http://localhost:8082"))
        .build();
}

Автентифікація в API Gateway

Робота з автентифікацією — ключова функція API Gateway в побудові безпечних додатків.

JWT (JSON Web Token) — це токен, який клієнт відправляє з запитами, а сервер (або API Gateway) перевіряє його достовірність, використовуючи секретний ключ. Це зручно, бо не треба щоразу звертатися до бази: токен вже містить всю інформацію.

Приклад налаштування перевірки JWT: Додаємо залежність у pom.xml:


<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-oauth2-resource-server</artifactId>
</dependency>

Налаштовуємо конфігурацію:


@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.oauth2ResourceServer()
            .jwt(); // Вмикаємо підтримку JWT
    }
}

Тепер усі запити з токенами будуть перевірятися.


Авторизація в API Gateway

Авторизація — це наше «а вам туди можна?». Вона відповідає за те, щоб користувачі могли робити тільки те, що їм дозволено.

Ролі та дозволи

У мікросервісному середовищі ролі (наприклад, ADMIN, USER) використовуються для обмеження функціональності.

Налаштуємо авторизацію з ролями:


@Override
protected void configure(HttpSecurity http) throws Exception {
    http.authorizeRequests()
        .antMatchers("/admin/**").hasRole("ADMIN") // Тільки для адмінів
        .antMatchers("/user/**").hasRole("USER")   // Тільки для користувачів
        .anyRequest().authenticated();            // Решта запитів - тільки для автентифікованих
}

Управління безпекою

Окрім автентифікації та авторизації, API Gateway має захищати від атак, таких як SQL-ін'єкції, XSS і CSRF.

Захист від CSRF

CSRF (Cross-Site Request Forgery) — це атака, коли зловмисник змушує користувача виконати запит від його імені. Spring Security за замовчуванням включає захист від CSRF для форм.

Для REST API її можна вимкнути (але обережно!):

@Override
protected void configure(HttpSecurity http) throws Exception {
    http.csrf().disable(); // Вимикаємо, якщо використовуємо токени
}

API Gateway може обмежувати кількість запитів для запобігання DoS-атакам. Наприклад, налаштуємо ліміт запитів за допомогою фільтрів.


Практичне завдання

  1. Налаштуйте маршрутизацію для двох мікросервісів: /users/** та /orders/**.
  2. Реалізуйте JWT-автентифікацію, де користувачі з токенами можуть відправляти запити.
  3. Додайте авторизацію для обмеження доступу:
    • Адміни можуть виконувати POST на /orders.
    • Користувачі можуть тільки GET на /users.

Ми зробили великий крок уперед — від простої маршрутизації до просунутих сценаріїв з автентифікацією та авторизацією. API Gateway тепер не тільки розподіляє запити, а й захищає твої дані та мікросервіси. Рухаємось далі!

Коментарі
ЩОБ ПОДИВИТИСЯ ВСІ КОМЕНТАРІ АБО ЗАЛИШИТИ КОМЕНТАР,
ПЕРЕЙДІТЬ В ПОВНУ ВЕРСІЮ