Почему рабочий процесс Oauth2 идет не так? - PullRequest
0 голосов
/ 09 июня 2019

У меня есть конфигурация @ResourceServer вместе с конфигурацией @AuthorizationServer.Так что все идет хорошо, конфигурация соответствует моим ожиданиям.Но после того, как AuthorizationServer аутентифицирует мое имя пользователя, пароль я получаю 404. Ожидаемый: сервер авторизации предлагает авторизовать клиентское приложение владельцу ресурса.

<dependency>
            <groupId>org.springframework.security.oauth</groupId>
            <artifactId>spring-security-oauth2</artifactId>
            <version>2.0.13.RELEASE</version>
</dependency>

@Configuration
@EnableAuthorizationServer
public class AuthorizationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
        clients.inMemory().withClient("javainuse").secret("{noop}secret")
                .authorizedGrantTypes("authorization_code")
                .scopes("read").authorities("CLIENT");
    }
}

@EnableWebSecurity
@Configuration
public class SecuirtyConfig extends WebSecurityConfigurerAdapter {
    @Override
    @Bean
    public AuthenticationManager authenticationManagerBean() throws Exception {
        return super.authenticationManagerBean();
    }

    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests().antMatchers("/").permitAll()
                .and().formLogin()
                .permitAll().and().logout().permitAll();
        http.csrf().disable();
    }

    @Bean
    public UserDetailsService userDetailsService() {
        InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();
        manager.createUser(User.withDefaultPasswordEncoder().username("user").password("user").roles("USER").build());
        manager.createUser(User.withDefaultPasswordEncoder().username("admin").password("admin").roles("ADMIN").build());
        return manager;
    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        auth.parentAuthenticationManager(authenticationManagerBean())
                .userDetailsService(userDetailsService());
    }
}

@Configuration
@EnableResourceServer
class ResourceServer extends ResourceServerConfigurerAdapter {
    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
                .antMatchers(HttpMethod.GET, "/api/tags", "/api/languages", "/api/topics").anonymous()
                .antMatchers("/api/users/**").access("#oauth2.hasScope('read')")
                .antMatchers(HttpMethod.POST, "/api/tags/**", "/api/languages/**", "/api/topics/**").access("#oauth2.hasScope('write')")
                .antMatchers(HttpMethod.PUT, "/api/tags/**", "/api/languages/**", "/api/topics/**").access("#oauth2.hasScope('write')")
                .antMatchers(HttpMethod.DELETE, "/api/tags/**", "/api/languages/**", "/api/topics/**").access("#oauth2.hasScope('write')")
                .and().formLogin().permitAll()
                .and().logout().permitAll()
                .and().csrf().disable();
    }
}

Рабочие процессы: Ожидается: 1. Запрос POST / oauth / авторизации с помощью clientId, scope, redirect_uri и response_type.2. Владелец ресурса аутентифицирует себя.3.Авторизационный сервер запрашивает у владельца ресурса доступ к клиентскому приложению (GET / oauth / authorize).4. Переадресация на клиентское приложение с кодом авторизации.5. Обмен кодом авторизации для доступа к токену.

Факт: 1. Запрос POST / oauth / авторизации с помощью clientId, scope, redirect_uri и response_type.2. Ресурс владельца (меня) аутентифицируется.3. Перенаправить на http: localhost: 8080 /.4.Нет запроса от сервера авторизации.

Интересно, может быть, AuthorizationServer не сохранил мой POST-запрос в / oauth / authorize, поэтому он просто получает URL-адрес успешного завершения по умолчанию.

Как я могувосстановить типичный рабочий процесс oauth AuhtorizationServer?

...