Как реализовать API-шлюз в качестве сервера ресурсов для проверки запроса, относящегося к Сервису с Auth Server OAuth2.0 в Spring Boot - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь создать приложение на основе микросервисной архитектуры в Spring Boot, используя:

  1. Сервер аутентификации (OAuth2.0 с использованием Spring Security)
  2. Шлюз API (Netflix Zuul) какСервер ресурсов (для проверки запроса на конкретный ресурс, обслуживаемый одним из микросервисов)
  3. Eureka / Discovery Server в качестве службы реестра услуг
  4. Feign Client (со всеми микросервисами, чтобы они взаимодействовали друг с другом)
  5. PostgreSQL как база данных (обрабатывается отдельной службой базы данных)

Проблема связана с шлюзом API.Я хочу, чтобы он работал как Ресурсный сервер, но как Zuul там работает и как Прокси-сервер.Поэтому я хочу знать, как мы можем реализовать его в качестве сервера ресурсов для проверки запросов на основе полномочий или ролей.

Я могу добиться этого в монолитном приложении, но здесь я немного запутался.Я могу использовать Feign Client с API-шлюзом, сделать его клиентом Eureka / Discovery и определить некоторые (Feign) интерфейсы для проверки запроса на конкретный ресурс, фактически обслуживаемый одним из микросервисов.

Например,Я могу создать (Сервис) Интерфейс для Сервиса Компании и проверить вещи в этом.Используя контроллер для каждой службы, я могу использовать @ PreAuthorize для проверки и проверки доступа к ресурсу.Но при таком подходе мне нужно создать интерфейс и контроллер для каждой службы.

// Company Controller File
@RestController
@RequestMapping(produces=MediaType.APPLICATION_JSON_VALUE)
public class TestController {
    @Autowired
    private DbEngineService dbEngineService;

    @GetMapping("companies")
    @PreAuthorize("hasRole('USER_ADMIN')") 
    ResponseEntity<?> getCompanies(Model model) {
        return companyService.addTestEntity(testEntity);
    }
}

// Company Service File
@FeignClient("company-service")
@RequestMapping("company-service")
public interface CompanyService{
    @GetMapping("companies")
    ResponseEntity<?> getCompanies();

    @GetMapping("company/{id}")
    ResponseEntity<?> getCompany(@PathVariable Long id);

}

Я не уверен, что этот подход правильный.Я впервые работаю с микросервисами.

Является ли способ, которым я пытаюсь реализовать API Gateway, поскольку Resource Server является правильным способом сделать это?Есть ли способ с Zuul прокси, чтобы справиться с чем-то подобным.Есть ли какой-нибудь другой лучший способ реализовать его, например, сделать все микросервисы в качестве сервера ресурсов или что-то в этом роде?

Спасибо.

...