JHipster: Как совершать защищенные вызовы микросервисов с сервера UAA с неаутентифицированным пользователем

Уважаемое сообщество StackOverflow,

Я обнаружил, что кто-то уже задавал что-то похожее на мою проблему здесь, но не получил хороших ответов.

Я хочу создать объект на микросервисе A, как только пользователь будет активирован на сервере UAA (когда в AccountResource вызывается activateAccount ()). На данный момент пользователь не аутентифицирован, и поэтому я не могу использовать AuthenticatedFeignClient, как это было бы с другими микросервисами. Когда я отключаю аутентификацию на микросервисе A и использую FeignClient, как описано в Документы JHipster, он работает должным образом, но я не хочу оставлять конечную точку доступной извне. Есть ли способ позволить серверу UAA аутентифицировать себя или разрешить серверу UAA доступ только к этой конкретной конечной точке в API микросервиса A?

Редактировать:

Наконец-то я заставил его работать, используя AuthenticatedFeignClient. Я просто скопировал клиентский пакет и FeignConfiguration из микросервиса на сервер uaa и изменил параметры безопасности в application-dev.yml и application-prod.yml следующим образом:

security:
    client-authorization: 
    access-token-uri: uaa/oauth/token 
    token-service-id: uaa 
    client-id: internal 
    client-secret: internal

Я думаю, вы ищете jhipster.tech/using-uaa/#inter-service-communication

Jon Ruddell 06.06.2018 17:15

Уважаемый Джон, спасибо за ваш ответ и вашу работу над Ignite и JHipster! Я заставил его работать (см. Вопрос)

Samuel 07.06.2018 12:58
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
2
1 603
2

Ответы 2

несмотря на то, что вы уже нашли правильное решение, я должен быстро объяснить, почему это правильно.

JHipster UAA поддерживает два разных потока авторизации: от пользователя к услуге и от услуги к услуге. Чаще всего используется первый. Это когда вы хотите контролировать, что пользователю разрешено делать в вашем приложении.

Обращение к сервису не связано с какой-либо проблемой, связанной с пользователем, поскольку не пользователь «входит в систему», а сам ваш микросервис. Вот почему следует добавить config.

Материал с копированием интерфейса аннотаций из других приложений в UAA - это немного плохой дизайн. Я собираюсь перенести эти аннотации из сгенерированного кода в библиотеку JHipster, чтобы решить эту проблему.

Я обнаружил, в чем проблема с аутентификацией и авторизацией между микросервисами, мне потребовалось три дня, чтобы понять, как решить эту проблему. Я использовал тег @AuthorizedFeignClient, и из-за того, что я защищаю ресурс api, используя: @PreAuthorize ("hasRole (" "+ AuthoritiesConstants.USER +" ")"), я не смог связаться с ними через фальшивого клиента, потому что @AuthorizedFeignClient просто проверяет, аутентифицирован ли ресурс или нет (см. Config / SecurityConfiguration.java) но он не сможет достичь конечной точки, потому что ресурс, который я хотел достичь, имеет другой уровень безопасности, который защищен ролью (@PreAuthorize), поэтому в этих случаях нам нужно будет использовать @AuthorizedUserFeignClient вместо @AuthorizedFeignClient.

Использование @AuthorizedUserFeignClient еще не было задокументировано Jhipster, и было бы неплохо сделать это, см .: https://www.jhipster.tech/using-uaa/#inter-service-communication

Я надеюсь, что это могло бы помочь другим людям, у которых есть такие проблемы между коммуникациями между службами.

Другие вопросы по теме