OAUTH2: при доступе к конечной точке REST из пользовательского интерфейса клиента для защищенного URI возвращается anonymousUser

Я работаю над весенней безопасностью OAUTH2, я должен попасть в конечную точку http: // локальный: 8082 / пользовательский интерфейс - REST из пользовательского интерфейса клиента, которая приведет меня к защищенному URI http: // локальный: 8082 / безопасный после входа на сервер аутентификации http: // localhost: 8081 / auth / логин.

Но вместо этого после нажатия на клиентский интерфейс http: // локальный: 8082 / пользовательский интерфейс он напрямую переводит меня на http: // локальный: 8082 / безопасный, а не запрашивает страницу входа. а на защищенной странице возвращается значение "anonymousUser".

Я делюсь своим клиентом и сервером ниже, и возвращаемое значение - «Добро пожаловать, пользователь! == anonymousUser». Любая помощь будет очень признательна, если я ошибаюсь.

моя конфигурация на стороне клиента

@EnableOAuth2Sso
@Configuration
@EnableWebSecurity
public class OauthConfig extends WebSecurityConfigurerAdapter {

     @Autowired
        private OAuth2ClientContextFilter oauth2ClientContextFilter;



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

    http
        .authorizeRequests()
        .antMatchers("/**")    
       .permitAll()

       .antMatchers("/", "/login/**")     
       .permitAll()
            .anyRequest()
            .authenticated().and()
            .httpBasic().and().addFilterAfter(oauth2ClientContextFilter, SecurityContextPersistenceFilter.class);
        }

    @Bean
    protected OAuth2RestTemplate OAuth2RestTemplate(
        OAuth2ProtectedResourceDetails resource, OAuth2ClientContext context) {
      return new OAuth2RestTemplate(resource, context);
    }
    }

application.yml

server:
  port: 8082
  servlet:
    context-path: /ui
  session: 
    cookieName: UISESSION

 security:
   oauth2: 
    client: 
      clientId: ClientId
      clientSecret: secret
      accessTokenUri: http://localhost:8081/auth/oauth/token
      userAuthorizationUri: http://localhost:8081/auth/oauth/authorize
      scope: openid
    resource: 
      userInfoUri: http://localhost:8081/auth/rest/hello/principal
      preferTokenInfo: false

application.properties

spring.thymeleaf.cache= false
spring.mvc.view.prefix=/
spring.mvc.view.suffix=.html

spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.SecurityAutoConfiguration

server.port= 8082
server.servlet.session.cookie.name=UISESSION

spring.thymeleaf.mode=LEGACYHTML5


management.endpoints.web.expose=*

сервер авторизации на стороне сервера

@Configuration
@EnableAuthorizationServer
public class AuthorisationServerConfig extends AuthorizationServerConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager;



    @Override
    public void configure(AuthorizationServerSecurityConfigurer security) throws Exception {
        // TODO Auto-generated method stub
        //security.allowFormAuthenticationForClients();
        security.tokenKeyAccess("permitAll()")
        .checkTokenAccess("isAuthenticated()");

    }

    @Override
    public void configure(ClientDetailsServiceConfigurer clients) throws Exception {

        clients.inMemory().withClient("ClientId")//.authorities("ROLE_ADMIN")
        .secret("{noop}secret")
        .authorizedGrantTypes("authorization_code").scopes("user_info").autoApprove(true);
    }

    @Override
    public void configure(AuthorizationServerEndpointsConfigurer endpoints) throws Exception {
        // TODO Auto-generated method stub
        endpoints.authenticationManager(authenticationManager);
    }

}

обслуживающий сервер ресурсов

@EnableResourceServer
@Configuration
@Order(1000)    
public class ResourceServerConfig  extends WebSecurityConfigurerAdapter {

    @Autowired
    private AuthenticationManager authenticationManager; 
    @Autowired

    private  UserDetailsService customUserDetailsService;

    @Autowired
      public ResourceServerConfig(AuthenticationManager authenticationManager, 
              CustomUserDetailsService customUserDetailsService) {
        this.authenticationManager = authenticationManager;
        this.customUserDetailsService = customUserDetailsService;
      }


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

        http.requestMatchers().antMatchers("/login","/oauth/authorize").and().authorizeRequests()
        .anyRequest().authenticated().and().formLogin().permitAll();


    }

    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {


        auth.parentAuthenticationManager(authenticationManager).
        userDetailsService(customUserDetailsService);

    }
}

служба на стороне сервера

@Service
public class CustomUserDetailsService implements UserDetailsService{

    @Autowired
    private UserRepository userRepository;

    @Override
    public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
        // TODO Auto-generated method stub
        Optional<Users> userOptional= userRepository.findByName(username);
        userOptional.orElseThrow(() -> new UsernameNotFoundException("user not found"));
        return userOptional.map(users -> new CustomUserDetails(users)).get();
    }


}

Все, что вы укажете ниже, .antMatchers("/**").permitAll() не имеет никакого эффекта ... всегда ставьте специальные случаи на первое место, а общие - на последнее. Зачем вы вообще включили эту конфигурацию? Это прямо противоположно .anyRequest().authenticated()

crizzis 02.05.2018 11:37

@crizzis, как было предложено, я изменил сопоставители на http.antMatcher ("/ **") .authorizeRequests () .antMatchers ("/", "/ login **") .permitAll () .anyRequest () .authenticated (). ....................... но теперь приближается моя старая проблема "Полная аутентификация требуется для доступа к этому ресурсу" ... Я предоставил все права, но эта ошибка сохраняется.

Mohit Darmwal 02.05.2018 13:38

Для ясности, ваша конфигурация теперь должна выглядеть следующим образом: http().authorizeRequests().antMatchers("/", "/login/**").permitAll().anyRequest().authenticated() - это так?

crizzis 02.05.2018 14:13

Кроме того, возникает ли «старая проблема» получения сообщения «Полная проверка подлинности для доступа к этому ресурсу» с сервера приложений сервера аутентификации?

crizzis 02.05.2018 14:16

@crizzis да, для доступа к этому ресурсу требуется полная аутентификация, исходящая от сервера аутентификации, и так выглядит моя конфигурация на стороне клиента .. http.antMatcher("/**") .authorizeRequests() .antMatchers("/", "/login**") .permitAll() .anyRequest() .authenticated()

Mohit Darmwal 03.05.2018 09:23
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Версия Java на основе версии загрузки
Версия Java на основе версии загрузки
Если вы зайдете на официальный сайт Spring Boot , там представлен start.spring.io , который упрощает создание проектов Spring Boot, как показано ниже.
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
0
5
152
0

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