Проблема с защитой службы Spring REST с помощью OAuth2 при загрузке Spring

#spring #spring-boot #oauth-2.0 #spring-rest

#весна #загрузка spring #oauth-2.0 #spring-rest

Вопрос:

Я пытался защитить свою службу Spring rest webs, внедрив OAuth2 в свое приложение. Я следовал этому руководству для его реализации.

Я реализовал это аналогично, но по какой-то причине, когда я нажимаю /oauth/token URL с помощью postman, он не возвращает мне токен.

Вот мой основной код для файлов:

1.AuthorizacionServerConfiguration.java

 @Configuration
@EnableAuthorizationServer
public class AuthorizacionServerConfiguration extends AuthorizationServerConfigurerAdapter {
@Autowired
@Qualifier("authenticationManagerBean")
private AuthenticationManager authenticationManager;

@Autowired
private TokenStore tokenStore;

public void configure(ClientDetailsServiceConfigurer clients) throws Exception {
    clients.inMemory()
    .withClient("User")
    .authorizedGrantTypes(new String[] { "password" }).authorities(new String[] { "ROLE_CLIENT", "ROLE_TRUSTED_CLIENT", "USER" }).accessTokenValiditySeconds(120)
    .scopes(new String[] { "read" }).autoApprove(true)
    .secret(passwordEncoder().encode("12345"));
}

public PasswordEncoder passwordEncoder() {
    return (PasswordEncoder)new BCryptPasswordEncoder();
}

public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
    endpoints
    .authenticationManager(this.authenticationManager)
    .tokenStore(this.tokenStore);
}

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

2.ResourceServerConfiguration.java

 @EnableResourceServer
@RestController
public class ResourceServerConfiguration extends ResourceServerConfigurerAdapter {
    @SuppressWarnings("rawtypes")
    public void configure(HttpSecurity http) throws Exception {
    ((ExpressionUrlAuthorizationConfigurer.AuthorizedUrl)http.authorizeRequests()
            .antMatchers(new String[] { "/api/v1/**","/oauth/token", "/oauth/authorize **" 
    })).permitAll();
  }
}
  

3.WebSecurityConfiguration.java

 @EnableWebSecurity
class WebSecurityConfiguration extends WebSecurityConfigurerAdapter {

@Bean
@Override
public UserDetailsService userDetailsService() {
    UserDetails user = User.builder().username("user1").password(passwordEncoder().encode("pass1")).roles(new String[] { "USER" }).build();
    return (UserDetailsService)new InMemoryUserDetailsManager(new UserDetails[] { user });
}

@Bean
public PasswordEncoder passwordEncoder() {
    return (PasswordEncoder)new BCryptPasswordEncoder();
}

@Bean
public AuthenticationManager authenticationManagerBean() throws Exception {
    return super.authenticationManagerBean();
}
}
  

когда я пытаюсь связаться с почтальоном. Я получаю сообщение о несанкционированном запросе вместо токена OAuth. Пожалуйста, посмотрите следующие скриншоты:
введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Я скопировал это построчно с тем, что у вас есть, в новый проект, и все работает так, как ожидалось, именно с тем, что у вас есть здесь. Я бы посоветовал проверить ваши зависимости. У меня это работает с spring boot, spring-boot-starter-oauth2-client, spring-boot-starter-oauth2-resource-server, spring-boot-starter-security и spring-boot-starter-web версии 2.3.5.RELEASE,

2. Можете ли вы изменить его на ответ? Это была проблема с моим файлом pom, и проблема была решена после исправления pom.

Ответ №1:

Я скопировал это построчно с тем, что у вас есть, в новый проект, и все работает так, как ожидалось, именно с тем, что у вас есть здесь. Я бы посоветовал проверить ваши зависимости. У меня это работает с spring boot, spring-boot-starter-oauth2-client, spring-boot-starter-oauth2-resource-server, spring-boot-starter-security и spring-boot-starter-web в версии 2.3.5.RELEASE.