Spring Cloud Gateway OAuth2 с Spring Security OAuth2 Сервер авторизации = цикл - PullRequest
0 голосов
/ 23 марта 2020

Я пытаюсь использовать Spring Authorization Server с Spring Cloud Gateway, но я застрял при получении информации о пользователе. Я могу видеть в журналах шлюза сообщения типа

[2020-03-23 13:36:35,061] TRACE org.springframework.web.HttpLogging - [45961b04] Decoded [{access_token=5b5a13f1-2b47-4739-bda2-74785f6e3828, token_type=bearer, expires_in=33556, scope=read}]

Это означает, что авторизация работает нормально, но после 302 НАЙДЕННОЕ расположение: / res (защищенный ресурс) пересылает меня обратно на сервер авторизации.

Полный код находится в демонстрационном проекте здесь: https://github.com/looksworking/gw-oauth

Сервер авторизации:

build.gradle. kts

application.yml

WebSecurityConfig

AuthZServerConfig

Spring Cloud Gateway:

build.gradle.kts

application.yml

GatewayApplication

Любая помощь очень ценится.

1 Ответ

1 голос
/ 24 марта 2020

Шлюз не может получить информацию о пользователе с сервера авторизации для создания принципала. Таким образом, он снова перенаправляет на сервер авторизации из-за отсутствия принципала. Попробуйте создать пользовательскую конечную точку информации пользователя на сервере авторизации. (/ userinfo вместо / oauth / userinfo). Возможно, вам потребуется разрешить / userinfo в конфигурации безопасности.

@RestController
public class UserInfoEndpoint {

    @PostMapping("/userinfo")
    public Map<String, Object> user() {
        Map<String, Object> map = new HashMap<>();
        String name = SecurityContextHolder.getContext().getAuthentication().getName();
        map.put("user_name", name);
        return map;
    }

}

Кроме того, добавьте user-info-authentication-method: form к вашему провайдеру.

...