Как отправить токен авторизации на предъявителя с помощью Spring Boot и @FeignClient - PullRequest
0 голосов
/ 08 мая 2018

Я использую Spring Boot для написания приложения, которое взаимодействует с HTTP-серверами отдыха. Один из серверов, к которым я подключаюсь (Wit.ai), использует токен авторизации beaerer. Запрос curl, который дает успешный ответ, выглядит следующим образом:

GET /message?q=sample message HTTP/1.1
Host: api.wit.ai
Authorization: Bearer XXXXXXXXXXXXX
Cache-Control: no-cache
Postman-Token: 526c3a11-8e61-4552-aa19-e913f6473753

Документы wit.ai говорят о токене следующее:

Wit.ai использует OAuth2 в качестве слоя авторизации. Таким образом, каждый запрос API должен содержать HTTP-заголовок Authorize с токеном. Токены доступа зависят от приложения.

Я пытаюсь отправить запрос GET на эту конечную точку в приложении Spring Boot, используя @FeignClient. Однако мне кажется, что конечная точка не принимает мой токен авторизации. Вот мой код FeignClient

@FeignClient(name="witGetter", url = "${wit.url}")
    public interface WitGetter {
        @RequestMapping(method = RequestMethod.GET, value = "/message?v=20180507q={text}",
            headers = {"Authorization: Bearer XXXXXXXXXXXXX"})
        WitResponse getWitResponse(@PathVariable("text") final String text);
}

Как правильно передать такой токен авторизации? Я пробовал несколько других вещей, но безрезультатно. Спасибо за любой совет !!!

Кстати, следующий код работает с использованием традиционного интерфейса Feign, но мне нужно использовать @FeignClient в этом случае.

public interface WitGetter {
    @Headers("Authorization: Bearer XXXXXXXXXXXXX")
    @RequestLine("GET /message?q={text}")
    WitResponse getWitResponse(@Param("text") String text);
}

(код ниже находится в отдельном конфигурационном файле)

@Bean
    public WitGetter defaultWitGetter(@Value("https://api.wit.ai") final String witUrl){
        return Feign.builder().decoder(new GsonDecoder()).target(WitGetter.class, witUrl);

} * * тысяча двадцать-один

EDIT

Код ошибки, который я получаю при использовании вышеуказанного кода:

Исключение в потоке "main" feign.FeignException: статус 400, читающий WitGetter # getWitResponse (String, String); содержание: { «ошибка»: «Неверный аутентификация, проверка токена / параметров», "код": "нет аутентификации" }

1 Ответ

0 голосов
/ 08 мая 2018

При использовании Feign через Spring Cloud вы можете использовать его так же, как при определении стандартного контроллера Spring MVC.

Ознакомьтесь с моей статьей о передаче заголовков с помощью Feign: http://blog.arnoldgalovics.com/2018/02/15/passing-headers-with-spring-cloud-feign/

Подсказка: вы можете добавить параметр @RequestHeader("Authorization") String bearerToken в определение метода.

И затем, конечно, назвать его как client.method(..., "Bearer " + token)

...