Spring Boot 2.0 / OAuth2 / JWT / Zuul / Микросервисы

Пытаюсь построить микросервисная архитектура. Но я столкнувшийся с трудностями с двух дней с OAuth2 и Zuul. Мне удалось запустить Auth / Resource-Server на той же службе, но не с Zuul. В данный момент я переключаюсь на другой сервис, авторизация больше не работает. Я tмного гидов (например, Baeldung), но никто не работает на меня. Наверное, потому что я использую Весенняя загрузка 2.0.3? Большинство руководств, использующих Spring Boot 1.5.x.

Думаю, это проблема конфигурации. Я использую Eureka для обнаружения сервисов, Zuul в качестве шлюза и точки входа. Когда пользователь запрашивает защищенную службу, он должен быть перенаправлен на мою службу аутентификации (OAuth2 / JWT). Токен, который он получает после входа в систему, должен храниться в Зууле (верно?). Собственно Зуул не получает жетон или не хранит его. Должен ли я делать это самостоятельно или Zuul и OAuth должны справиться с этим, а у меня просто плохие конфигурации? Может ли кто-нибудь показать мне, как вы настраиваете эту архитектуру или новое / рабочее руководство для Spring Boot 2.0.3?, я действительно очень разочарован, нужна помощь. Я новичок в Spring, но мне нужно выучить его для работы. Но сейчас я просто перенапряжен.

Дополнительная информация:

Я не создавал никаких представлений сейчас. Я только что определил какой-то контроллер по умолчанию, который возвращает String и защищен @PreAuthorize.

Шлюз-Сервис:

GatewayServiceApplication.java

@SpringBootApplication
@EnableZuulProxy
@EnableDiscoveryClient
@Configuration
public class GatewayServiceApplication {

    public static void main(String[] args) {
        SpringApplication.run(GatewayServiceApplication.class, args);
    }
}

SecurityConfig.java

@Configuration
@EnableOAuth2Sso
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @Override
    public void configure(HttpSecurity http) throws Exception {
        http.antMatcher("/**")
                .httpBasic().disable()
                .authorizeRequests()
                .antMatchers("/", "/core/", "/core/login**", "/oauth/authorize", 
                 "/core/oauth/authorize", "/login")
                .permitAll()
                .anyRequest()
                .authenticated()
                .and()
                .formLogin().permitAll();
    }
}

Здесь у меня было много разных antMatchers.

application.properties

server.port=8000
spring.application.name=gateway-service
eureka.client.service-url.defaultZone=http://localhost:8001/eureka/
security.oauth2.sso.login-path=http://localhost:8000/core/login
security.oauth2.client.client-id=zuul
security.oauth2.client.client-secret=zuul
security.oauth2.client.access-token-uri=http://localhost:8000/core/oauth/token
security.oauth2.client.user-authorization-uri=http://localhost:8000/core/oauth/authorize
#security.oauth2.resource.user-info-uri=http://localhost:8000/core/user/me
security.oauth2.resource.user-info-uri=http://localhost:8000/core/secured
spring.thymeleaf.cache=false

Я считаю, что это провал.

Core-Service

CoreApplication.java

@SpringBootApplication
@EnableDiscoveryClient
@EnableResourceServer
public class CoreApplication {

    public static void main(String[] args) {
        SpringApplication.run(CoreApplication.class, args);
    }
}

AuthServerConfig

@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("zuul")
                .secret(passwordEncoder.encode("zuul"))
                .authorizedGrantTypes("authorization_code")
                .scopes("user_info")
                .autoApprove(true)
                .redirectUris("http://localhost:8000/core/secured");
    }
}

SecurityConfig

@Configuration
@Order(1)
public class SecurityConfig extends WebSecurityConfigurerAdapter {

    @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();
    }
}

application.properties

server.port=8003
spring.application.name=core
eureka.client.service-url.defaultZone=http://localhost:8001/eureka

Хорошо, особенно здесь я многое изменил. Так что, наверное, я многое уничтожил из старых руководств. (Извини я плохо знаю английский!)

Привет, у тебя все заработало? Столкнувшись с аналогичной проблемой.

Ankur Raiyani 04.07.2019 08:46
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
5
1
2 226
0

Другие вопросы по теме