Весеннее облако Zuul проходит JWT вниз по течению

Я прочитал кучу вопросов по этому поводу, но ни один из них не похож на мой крайний случай, когда у меня уже есть JWT.

Я использую Auth0 (обратите внимание, auth-zero, а не Oauth) в своем интерфейсе, чтобы получить загруженный JWT с областями и аутентификацией для моего бэкэнда. Когда я вхожу в свой внешний клиент, я получаю хороший JWT с access_token. Если я скопирую этот токен, я смогу сделать прямой запрос curl к своим серверным микросервисам.

curl -X GET -H "Authorization: Bearer TOKEN_HERE" -H "Cache-Control: no-cache" "http://192.168.0.109:39885"

И это работает, как и ожидалось, я получаю ответ 200. Ницца.

Теперь, когда я пытаюсь выполнить тот же запрос curl через прокси-сервер Zuul, я получаю неприятный 401.

Конфигурация моего шлюза:

@EnableHystrix
@EnableZuulProxy
@EnableEurekaClient
@SpringBootApplication
public class EdgeServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(EdgeServiceApplication.class, args);
    }
}

Теперь читаем документацию и эта беседа от блестящего доктора Сайера Я знаю, что мне нужно разрешить заголовки идти вниз по течению, что Я сделал:

zuul:
  sensitiveHeaders:
  routes:
    instances:
      path: /instances/**
      serviceId: instance-service
    restore:
      path: /restore/**
      serviceId: restore-service

Установка sensitiveHeaders пустым должна разрешать все (конечно, для тестирования).

Глядя дальше в документы, я вижу, что мне нужно добавить @EnableOAuth2Sso в мою конфигурацию Zuul. Вот тут я запутался/все ломается.

Насколько я знаю, @EnableOAuth2Sso предназначен для создания и проверки токенов. Я не хочу этого делать. У меня уже есть хороший токен для моего микросервиса (который проверяет его там внизу).

Как мне сказать Зуулу, чтобы он не связывался с моими JWT и просто отправил их?


person Chris Turner    schedule 18.11.2017    source источник
comment
Можете ли вы попробовать с этим свойством? proxy.auth.routes.‹имя_маршрута› oauth2   -  person MohamedSanaulla    schedule 18.11.2017
comment
Боюсь, не повезло. Однако, когда я добавил это, начала происходить странная вещь, мой токен удаляется во внешнем интерфейсе, и я выхожу из системы...   -  person Chris Turner    schedule 18.11.2017


Ответы (1)


Я решил это, в моем коде было много ошибок, но суть проблемы заключалась в следующем:

  • Я пытался отправить весь JWT в микросервис, хотя должен был просто отправить access_token
  • Когда я попытался отправить access_token, ember-simple-auth0 фактически отправляет id_token по умолчанию.
  • Мне нужно было настроить Zuul для передачи запросов CORS прямо в микросервисы.

Как только я начал отправлять access_token, а не id_token, было легко приступить к отладке проблемы.

Чтобы указать ember-simple-auth0 использовать вместо этого access_token, добавьте новый авторизатор со следующим:

// app/authorizers/application.js    
import Ember from 'ember';
    import BaseAuthorizer from 'ember-simple-auth/authorizers/base';
    const {
      isPresent,
      debug
    } = Ember;

    export default BaseAuthorizer.extend({
      authorize(sessionData, block) {
        let userToken = sessionData['accessToken'];

        if (isPresent(userToken)) {
          block('Authorization', `Bearer ${userToken}`);
        } else {
          debug('Could not find the authorization token in the session data for the jwt authorizer.');
        }
      }
    });

Затем не забудьте указать адаптеру использовать новый авторизатор:

export default DS.JSONAPIAdapter.extend(DataAdapterMixin, {
  authorizer: 'authorizer:application',
});

Чтобы перенаправить CORS на ваши микросервисы, используйте:

spring:
  mvc:
    dispatch-options-request: true

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

zuul:
  sensitiveHeaders:
  routes:
    instances:
      path: /instances/**
      serviceId: instance-service
      stripPrefix: false

    restore:
      path: /restore/**
      serviceId: restore-service
      stripPrefix: false

Надеюсь, кто-то найдет это полезным.

person Chris Turner    schedule 18.11.2017