Spring Security OAuth + Zuul + Eureka - 401 в / oauth / токен - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь настроить небольшое приложение микро-службы, используя Eureka Discovery Server, Zuul в качестве шлюза, все защищенные с помощью Spring Security Oauth, но я не могу получить токен ...

Глядя на журналы, выглядитнапример, запрос идет от моего шлюза к серверу авторизации, но я не могу получить токен, у меня продолжает появляться эта ошибка

{
    "timestamp": "2019-05-28T20:25:40.927+0000",
    "status": 401,
    "error": "Unauthorized",
    "message": "Unauthorized",
    "path": "/oauth/token"
}

По сути, это класс конфигурации шлюза Zuul

@Configuration
@EnableResourceServer
public class SecurityConfiguration extends ResourceServerConfigurerAdapter {

    @Override
    public void configure(final HttpSecurity http) throws Exception {
        http.authorizeRequests().
            antMatchers("/oauth/**").
            permitAll().
            antMatchers("/**").
            authenticated();
    }    

}

это должно позволить передавать запросы в / oauth / **

Файл application.yaml

zuul:
  ignored-services: '*'
  sensitive-headers: Cookie,Set-Cookie
  routes:
    oauth-service: #my auth server application name
      path: /oauth/**
      service-id: OAUTH-SERVICE
      stripPrefix: false

Отсюда мы попадаем на сервер авторизации

Этокак я это настраиваю

@Configuration
@EnableAuthorizationServer
public class AuthServerConfiguration extends AuthorizationServerConfigurerAdapter {


    @Autowired
    @Qualifier("authenticationManagerBean")
    private AuthenticationManager authenticationManager;

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

    @Override
    public void configure(final ClientDetailsServiceConfigurer clients) throws Exception { // @formatter:off
        clients.inMemory()
                .withClient("client")
                .secret(passwordEncoder().encode("secret"))
                .authorizedGrantTypes("password","refresh_token", "client_credentials")
                .scopes("read", "write")
                .accessTokenValiditySeconds(3600)       // 1 hour
                .refreshTokenValiditySeconds(2592000)  // 30 days
                    }


    @Bean
    @Primary
    public DefaultTokenServices tokenServices() {
        final DefaultTokenServices defaultTokenServices = new DefaultTokenServices();
        defaultTokenServices.setTokenStore(tokenStore());
        defaultTokenServices.setSupportRefreshToken(true);
        return defaultTokenServices;
    }

    @Override
    public void configure(final AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        final TokenEnhancerChain tokenEnhancerChain = new TokenEnhancerChain();
        tokenEnhancerChain.setTokenEnhancers(Arrays.asList(tokenEnhancer(), accessTokenConverter()));
        endpoints.tokenStore(tokenStore()).tokenEnhancer(tokenEnhancerChain).authenticationManager(authenticationManager);
    }

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

    @Bean
    public JwtAccessTokenConverter accessTokenConverter() {
        final JwtAccessTokenConverter converter = new JwtAccessTokenConverter();
        converter.setSigningKey("123");
        return converter;
    }

    @Bean
    public TokenEnhancer tokenEnhancer() {
        return new CustomTokenEnhancer();
    }

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

И WebSecurity

 @Configuration
    public class SecurityConfiguration extends WebSecurityConfigurerAdapter {

        @Autowired
        private BCryptPasswordEncoder passwordEncoder;

        @Autowired
        public void globalUserDetails(final AuthenticationManagerBuilder auth) throws Exception {
            // @formatter:off
        auth.inMemoryAuthentication()
          .withUser("john").password(passwordEncoder.encode("123")).roles("USER");
        }// @formatter:on

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

        @Override
        protected void configure(final HttpSecurity http) throws Exception {

            http.csrf().disable();

        }

    }
...