Могу ли я передать авторизацию JWT из пружинного RestController во внешний бэк-API - PullRequest
0 голосов
/ 15 апреля 2020

У меня BFF с пружинной загрузкой с очень простой страницей jQuery в качестве внешнего интерфейса. BFF требует OAUTH2 с внешним сервером авторизации. (Не уверен, что BFF действительно правильный термин здесь, но я надеюсь, что мой смысл достаточно ясен)

После входа в систему и авторизации я хотел бы позвонить в REST API, который защищен тем же сервером авторизации и Мне нужны учетные данные пользователя (JWT) из логина.

FE -> BFF -> Ext API

Как передать эти учетные данные в контроллере BFF REST?

Я нашел предложение получить токен из заголовка запроса и вручную добавить его в запрос вызова бэкэнда. Но в моем случае Spring использует безопасность на основе сеанса, и токен не находится ни в заголовках, ни в принципале, ни в сеансе. (Возможно, я мог бы заставить Spring использовать защиту без сохранения состояния, но подход кажется сомнительным)

Я делаю это совершенно неправильно?

Это то, что я хотел бы сделать:

    @GetMapping("/fromApi")
    public String getValueFromApi(){
        RestTemplate api = new RestTemplate();
        // this call needs to have the "Authorization: Bearer token" header set
        Map response = api.getForObject("https://secure.backend.api/giveme", Map.class);
        // will throw: org.springframework.web.client.HttpClientErrorException$Unauthorized: 401 Unauthorized: [{"error":"authorization not provided"}]
        return "Entries: " + response.size();
    }

Это мои зависимости:

    implementation 'org.webjars:jquery:3.4.1'
    implementation 'org.webjars:bootstrap:4.3.1'
    implementation 'org.webjars:webjars-locator-core'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-oauth2-client'

Спасибо

1 Ответ

0 голосов
/ 15 апреля 2020

После очередного дня поиска в Google я действительно нашел решение:

  1. токен доступен в клиенте @ RegisteredOAuth2AuthorizedClient OAuth2AuthorizedClient и может быть введен в метод контроллера
  2. мой случай Переадресация токенов / делегирование / олицетворение описаны здесь: https://spring.io/blog/2018/03/06/using-spring-security-5-to-integrate-with-oauth-2-secured-services-such-as-facebook-and-github

Описанное решение работает для моего случая.

...