Я использую @EnableOAuth2Sso
для аутентификации пользователя на стороннем сервере аутентификации на сервере Zuul. Мне нужно передать информацию о пользователе из Zuul на маршрутизируемые серверы. Я настроил конечную точку запроса /userinfo
для возврата jsonified-представления сглаженной версии информации о пользователе от третьей стороны. Как передать эту информацию о пользователе на один из серверов ресурсов?
Что я уже пробовал:
Я попытался сделать запрос, используя файл @LoadBalanced @Bean RestTemplate
. Однако меня перенаправляют к третьей стороне для авторизации. Для sensitive-headers
установлено значение none. Я проверил, через какие заголовки проходили:
["upgrade-insecure-requests","user-agent","accept","accept-language","cookie",
"authorization","x-forwarded-host","x-forwarded-proto",
"x-forwarded-prefix","x-forwarded-port","x-forwarded-for","accept-encoding",
"content-length", "host","connection"]
Итак, затем я попытался использовать @LoadBalanced @Bean OAuth2RestTemplate
. Мне пришлось установить конфигурацию security.basic.enabled=false
, чтобы предотвратить появление запроса на вход в систему для аутентификации пользователя. Это производит UserRedirectRequiredException
Сервер ресурсов
@RequestMapping(value = "/test", method = RequestMethod.GET)
public ResponseEntity<String> test3() {
return restTemplate.getForEntity("http://zuul-server/userinfo", String.class);
}
Зуул Сервер
@RequestMapping(value = "/userinfo", produces = MediaType.APPLICATION_JSON_VALUE)
public User getInfo(OAuth2Authentication auth) {
return service.getUser(auth); // Returns User Object
}
Дополнительные примечания
Сервер ресурсов не был помечен @EnableResourceServer
. Если это так, перенаправленный запрос приведет к сообщению об ошибке Invalid access token
.