Весенняя загрузка Oauth2: передача токенов от клиента, использующего Feign, Ribbon, Zull и Eureka для получения ресурсов - PullRequest
0 голосов
/ 21 ноября 2018

У меня есть клиент oauth2, который успешно получает токен с сервера авторизации.(это не всегда так, но теперь это так ...:))

Клиент, шлюз zuul и сервер ресурсов зарегистрированы в Eureka.

Мой клиент использует проксидля доступа к службе удаленных ресурсов с именем microservice-files.

@RestController
@FeignClient(name = "zuul-server")
@RibbonClient(name = "microservice-files")

public interface ProxyMicroserviceFiles {

    @GetMapping(value = "microservice-files/root")
    FileBean getUserRoot();

}

Поэтому я хотел бы передать токен Zull, а затем серверу ресурсов.

Я могу ретранслировать токентаким образом можно связаться с Zuul и, очевидно, балансировка нагрузки также управляется (я только что проверил, я не знал, и это здорово) также zuul может передавать токен, но это не очень удобно, я предпочел бы предыдущий подход.

@EnableConfigurationProperties
@SpringBootApplication
@EnableFeignClients("com.clientui")
public class ClientUiApplication {

    @Bean
    public OAuth2RestOperations restOperations(
            OAuth2ProtectedResourceDetails resource, 
            OAuth2ClientContext context) {

        return new OAuth2RestTemplate(resource, context);
    }

    public static void main(String[] args) {

        SpringApplication.run(ClientUiApplication.class, args);
    }
}

вот тестовый контроллер

@Controller
public class ClientController {

    @Autowired
    private RestOperations restOperations;

    @RequestMapping("/root")
    public ResponseEntity userRootTest() {

       String rootUrl = "http://localhost:9004/microservice-files/root";

       return  restOperations.getForEntity(rootUrl,FileBean.class);

    }

}

1 Ответ

0 голосов
/ 24 ноября 2018

Если я правильно понимаю вашу проблему, то вы можете использовать RequestInterceptor для добавления токена в каждый запрос симулятора.Для этого вы можете использовать следующую конфигурацию:

@Bean
public RequestInterceptor oauth2FeignRequestInterceptor(OAuth2ClientContext oauth2ClientContext,
                                                        OAuth2ProtectedResourceDetails resource) {
    return new OAuth2FeignRequestInterceptor(oauth2ClientContext, resource);
}

@Bean
protected OAuth2ProtectedResourceDetails resource() {
    AuthorizationCodeResourceDetails resource = new AuthorizationCodeResourceDetails();
    resource.setAccessTokenUri("http://127.0.0.1:9000/auth/login");
    resource.setUserAuthorizationUri("http://127.0.0.1:9000/auth/authorize");
    resource.setClientId("my-client");
    resource.setClientSecret("my-secret");
    return resource;
}
...