Springboot SSO, есть некоторые странные перенаправления - PullRequest
0 голосов
/ 02 января 2019

Я попытался реализовать свой собственный SSO-сервер, используя springboot 1.5.3 и клиентское приложение thymeleaf для его тестирования.

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


Случай, который не работает:

Я пытаюсь открыть защищенную страницу.
Допустим, 8080 - это порт сервера авторизации и 8081 - клиентское приложение.

Итак, когда я прочитал о потоке authorization_code, он должен работать следующим образом:
1. Откройте securedPage (8081)
3. Перенаправляет на страницу входа на сервер авторизации (8080)
3. Вывведите свои учетные данные.
4. Перенаправляет вас на страницу (8081) вместе с кодом.
5. Отправьте запрос с кодом токена.(/ oauth / token)
6. Вы будете перенаправлены на ваш сайт с помощью токена.

Но в моем случае это работает:
1. Откройте securedPage (8081)
2.Перенаправляет на XYZ (8081)
3. Перенаправляет на страницу входа на сервер авторизации (8080)
4. Вы вводите свои учетные данные.
5. Перенаправляет вас на XYZ (8081) вместе с кодом.
6. Появляется страница ошибки

XYZ = страница под путем / логином клиентского приложения.

Странно то, что по этому пути ничего нет.А в браузере я вижу только страницу ошибки Whitelabel. Произошла непредвиденная ошибка (тип = Неавторизован, статус = 401).
Ошибка аутентификации: не удалось получить токен доступа

Конфигурация приложения сервера авторизации:

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

@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter 
{
    private final AuthenticationManager authenticationManager;

    @Autowired
    public AuthServerConfig(AuthenticationManager authenticationManager) {
        this.authenticationManager = authenticationManager;
    }

    @Override
    public void configure(final AuthorizationServerEndpointsConfigurer endpoints) {
        endpoints.tokenStore(tokenStore())
                .authenticationManager(authenticationManager);
    }

    @Override
    public void configure(final ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory()
                .withClient("clientId")
                .secret("secret")
                .scopes("read", "write")
                .authorizedGrantTypes("password", "client_credentials",     "authorization_code", "implicit")
                .accessTokenValiditySeconds(3600)
                .autoApprove(true)
                .redirectUris("http://localhost:8081/login");
    }

    @Override
    public void configure(
            AuthorizationServerSecurityConfigurer oauthServer) {
        oauthServer.tokenKeyAccess("permitAll()")
                .checkTokenAccess("isAuthenticated()");
    }

    @Bean
    public TokenStore tokenStore() {
        return new InMemoryTokenStore();
    }

}

Веб-безопасность:

@Configuration
@Order(1)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.requestMatchers()
                .antMatchers("/login", "/oauth/authorize")
                .and()
                .authorizeRequests()
                .anyRequest().authenticated()
                .and()
                .formLogin().permitAll();
    }

Конфигурация клиентского приложения:

Веб-конфигурация

@Configuration
@EnableOAuth2Sso
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {

        http
                .antMatcher("/**")
                .authorizeRequests()
                .antMatchers("/", "/login**", "/index**")
                .permitAll()
                .anyRequest()
                .authenticated().and().csrf().disable();
    }
}

Итак, два моих самых больших вопроса:

Почему он перенаправляет меня через страницу входа в клиентское приложение(ЧТО НЕ СУЩЕСТВУЕТ), вместо того, чтобы перенаправить меня прямо на страницу входа сервера авторизации?

Почему я получаю сообщение об ошибке при получении токена доступа, а меня перенаправляют только для получения кода авторизации?Более того, это удалось, потому что на этой странице ошибки у меня есть код в параметрах.

UPDATE # 1

Ошибка произошла из-за свойства клиентского приложения

security.oauth2.client.client-authentication-схема = форма

, если это

security.oauth2.client.client-аутентификация-схема = заголовок

этоработает правильно, но все равно не отвечает, почему он перенаправляется на: 8081 / login и затем на: 8080 / login вместо просто на: 8080 / login?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...