У меня есть конфигурация @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?