#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 или проксировании, поскольку вы хотите открыть новую вкладку с пользовательскими заголовками, это почти единственный способ, который я вижу, чтобы продолжить. Тогда вы можете подумать о защите журналов вашего веб-сервера