В Jhipster отсутствует токен предъявителя аутентификации

#angularjs #oauth-2.0 #http-headers #jhipster #netflix-zuul

#angularjs #oauth-2.0 #http-заголовки #jhipster #netflix-zuul

Вопрос:

Я настроил микросервисную архитектуру с одним UAA, одним шлюзом и одним сервисом (одним веб-приложением), как описано здесь https://jhipster.github.io/using-uaa /

После аутентификации пользователя в этом веб-приложении появляется несколько ссылок, подобных этой

 <a href="/zuulfitler/route?url=http://www.google.com" target="_blank"
>google</a>
 

Когда пользователь нажимает, появляется фильтр zuul «route», который проверяет, имеет ли запрос надлежащие права, а затем перенаправляет на целевой URL.

Проблема заключается в том, что когда запрос перехватывается zuul, пользователь отображается как не прошедший проверку подлинности, поскольку http-заголовок авторизации с токеном предъявителя не был введен, поскольку запрос не был выполнен объектом $http.

Смотрите: https://jhipster.github.io/using-uaa/#jhipster-uaa

Этот токен носителя вводится в качестве заголовка авторизации в каждый запрос, выполняемый объектом AngularJS $http.

Как я могу ввести http-заголовок при нажатии на ссылку?

Заранее благодарю вас.

Ответ №1:

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

<a ng-href="/zuulfilter/route?url=http://google.comamp;access_token={{ctrl.accessToken}}" target="_blank">google</a>

при передаче токена через URL, а не заголовок, который также распознается spring cloud security.

Комментарии:

1. Спасибо, это возможное решение. Я не знал, что spring security автоматически распознает токен, если он передается по url. Проблема в том, что токен открыт и может быть сохранен в журналах веб-сервера. Другого способа нет?

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