Я пытаюсь реализовать сервер OAuth2 с помощью Spring Security, но получаю исключение «InsufficientAuthenticationException»
Это моя текущая конфигурация:
Файл WebSecurityConfigurer
@Configuration
@Order(1)
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.requestMatchers()
.antMatchers("/login", "/oauth/authorize","/oauth/token")
.and()
.authorizeRequests()
.anyRequest()
.authenticated()
.and()
.formLogin()
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("john")
.password(passwordEncoder().encode("123"))
.roles("USER");
}
@Bean
public BCryptPasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
Файл AuthorizationServerConfigurer
@Configuration
@EnableAuthorizationServer
public class AuthServerConfig extends AuthorizationServerConfigurerAdapter {
@Autowired
private BCryptPasswordEncoder passwordEncoder;
@Override
public void configure(
AuthorizationServerSecurityConfigurer oauthServer) throws Exception {
oauthServer.tokenKeyAccess("permitAll()")
.checkTokenAccess("isAuthenticated()");
}
@Override
public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
clients.inMemory()
.withClient("SampleClientId")
.secret(passwordEncoder.encode("secret"))
.authorizedGrantTypes("authorization_code")
.scopes("user_info")
.autoApprove(false)
.redirectUris("http://localhost:3000/callback");
}
}
Я пытаюсь сделать следующее:
1) Hit / auth/ login, чтобы войти в систему, и я могу ввести учетные данные.
2) Собрать код, отправленный на обратный вызов redirect_uri
3) Hit / auth / oauth / token следующим образом
Это вызывает эту ошибку:
2018-12-17 13:59:08.384 DEBUG 91394 --- [nio-8081-exec-3] o.s.security.web.FilterChainProxy : /oauth/token/ has no matching filters
2018-12-17 13:59:08.385 DEBUG 91394 --- [nio-8081-exec-3] .s.o.p.e.FrameworkEndpointHandlerMapping : Mapped to public org.springframework.http.ResponseEntity<org.springframework.security.oauth2.common.OAuth2AccessToken> org.springframework.security.oauth2.provider.endpoint.TokenEndpoint.postAccessToken(java.security.Principal,java.util.Map<java.lang.String, java.lang.String>) throws org.springframework.web.HttpRequestMethodNotSupportedException
2018-12-17 13:59:08.386 WARN 91394 --- [nio-8081-exec-3] o.s.s.o.provider.endpoint.TokenEndpoint : Handling error: InsufficientAuthenticationException, There is no client authentication. Try adding an appropriate authentication filter.
Я перепробовал все, что предлагают другие посты, но безуспешно.
РЕДАКТИРОВАТЬ: Это мой файл application.properties
Пожалуйста, игнорируйте URL, указанный на изображениях POSTMAN, правильный URIS должен быть / auth / oauth / *
Есть идеи, что я делаю неправильно?