JHipster: Как совершать безопасные звонки на микросервисы с сервера UAA с неаутентифицированным пользователем - PullRequest
0 голосов
/ 06 июня 2018

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

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

Я хочусоздайте сущность на микросервисе A, как только пользователь будет активирован на сервере UAA (когда в AccountResource вызывается activAccount ()).На этом этапе пользователь не аутентифицирован, и поэтому я не могу использовать AuthenticatedFeignClient, как на других микросервисах.Когда я отключаю аутентификацию на микросервисе A и использую FeignClient, как описано в JHipster Docs , она работает, как и ожидалось, но я не хочу оставлять конечную точку доступной извне.Есть ли способ позволить серверу 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

Ответы [ 2 ]

0 голосов
/ 25 октября 2018

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

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

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

0 голосов
/ 21 июня 2018

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

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

Звонок между сервисами не состоит из каких-либо проблем, связанных с пользователем, так как не пользователь «входит в систему», а сам ваш микросервис.Вот почему следует добавить конфигурацию.

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

...