Уважаемое сообщество 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
Уважаемый Джон, спасибо за ваш ответ и вашу работу над Ignite и JHipster! Я заставил его работать (см. Вопрос)




несмотря на то, что вы уже нашли правильное решение, я должен быстро объяснить, почему это правильно.
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
Я надеюсь, что это могло бы помочь другим людям, у которых есть такие проблемы между коммуникациями между службами.
Я думаю, вы ищете jhipster.tech/using-uaa/#inter-service-communication